1

我创建的两个对象有问题。一旦我打电话给一个,我就很难打电话给另一个。让我从这两个对象中编写一些代码来说明我的意思。到目前为止,我所拥有的效果很好。

class User {
private $userdata = array();

public function __construct(){      
}

public function set($var, $value) {
    $this->userdata[$var] = $value; 
}

public function get($var) {
      if(isset($this->userdata[$var])){
         return $this->userdata[$var];
      }
    return NULL;
    }
}

然后我有我的用户服务类:

class UserService {
private $db;
private $error;
private $fields = array();


    public function __construct() {
        $this->db = new Database();

    }

            public function updateUser(){
                  //some update query
            }




            public function getCurrentUser($fields) {   

    $query = sprintf("SELECT ".$this->fields." FROM User WHERE IDUser=%s", 
$this->db->GetSQLValueString($_SESSION['MM_Username'], "int"));
        $result = $this->db->query($query);

        if($result && $this->db->num_rows($result) > 0) {

            //create new user class
            $user = new User();
            $row = $this->db->fetch_assoc($result);

            //set rows as object
            foreach($row as $key => $value){
                $user->set($key, $value);   

                             return $user;
            }
                     }
             }

}

在我打电话给用户的页面上,我运行以下代码:

$um = new UserService();
$userfields = "*";  
$user = $um->getCurrentUser($userfields);

所以我现在已经通过调用实例化了我的 User() 类getCurrentUser()我正在努力看看我现在如何调用updateUser()$user 因为 $user var 是 User 类而不是userService类的一部分。

4

1 回答 1

3

由于updateUser在您的UserService类中定义,使其作用于特定User实例的最佳方法是将其作为参数传递。

例如,将声明更改为

public function updateUser(User $user) {

}

并这样称呼它

$um->updateUser($user);

如果您不想这样做,您还可以更改User类以保留对创建它的服务的引用。请注意,这可能是糟糕的设计,因为它紧密耦合UserUserService,因此为了方便而牺牲了一些可维护性。

class User {
    protected $service;
    public function __construct($service) {
        $this->service = $service;
    }
    public function update() {
        return $this->service->updateUser($this);
    }
    // ... other code you already had ...
}

...然后在您的getCurrentUser功能更改new User()new User($this)

于 2013-10-27T16:31:22.060 回答