0

我是 OOP 的新手,对此非常困惑。一个根据传递的 ID 从数据库中收集用户信息的类:

class user {

    public $profile_data;
    public function __construct($profile_user_id) {
        $this->profile_data = user_data($profile_user_id, 'id', 'username', 'password', 'email', 'admin');
    }

}

$profile_data[] = new user(1);

如何获取数组中的所有变量?username例如,我如何回显?

4

3 回答 3

4

简单地试试这个。

class user {

        public $profile_data;
        public function __construct($profile_user_id) {
            $this->profile_data = user_data($profile_user_id, 'id', 'username', 'password', 'email', 'admin');
        }

    }

    $userObj = new user(1);
    $profileData = $userObj->profile_data;
    echo $profileData['username'];
于 2013-02-24T07:06:39.893 回答
2

假设您的 user_data 函数返回一个关联的数据数组,您应该能够使用以下方式访问字段:

$profile = new user(1);
echo $profile->profile_data['username'];

就像在 Lighthart 的示例中一样,创建私有变量以及访问它们的函数是一种很好的做法。

另一种选择是实现 ArrayAccess 接口 ( http://php.net/manual/en/class.arrayaccess.php ) 使用此接口,您可以像使用数组一样使用对象。也就是说,您可以使用:

echo $user['username'];

作为起点,您可以尝试以下方法:

class user implements ArrayAccess {
  private $data;
  public function __construct($profile_user_id) {
    $this->data= user_data($profile_user_id, 'id', 'username', 'password', 'email', 'admin');    
  }

  public function offsetSet($offset, $value) {
    // Do nothing, assuming non mutable data - or throw an exception if you want
  }

  public function offsetExists($offset) {
    return isset($this->data[$offset]);
  }

  public function offsetUnset($offset) {
    // Do nothing, assuming non mutable data - or throw an exception if you want
  }

  public function offsetGet($offset) {
    return isset($this->data[$offset]) ? $this->data[$offset] : null;
  }
}
于 2013-02-24T07:07:13.863 回答
0

您给出的示例可能不适用于您要完成的工作。尚不清楚 userdata 的功能是什么。修改:

class User {
    private $id;
    private $username;
    private $password;
    private $email;
    private $admin;

    public function __construct($id, $username, $password, $email, $admin) {
        $profileData = user_data($profile_user_id
                                ,'id'
                                ,'username'
                                ,'password'
                                ,'email'
                                ,'admin');
        $this->id       = $profileData ['id'];
        $this->username = $profileData ['username'];
        $this->password = $profileData ['password'];
        $this->email    = $profileData ['email'];
        $this->admin    = $profileData ['admin'];

    }

    public function getId(){ return $this->id; }
    public function getUsername(){ return $this->username; }
    public function getEmail(){ return $this->email; }
    public function getAdmin(){ return $this->admin; }
    public function setAdmin($admin){ $this->admin = $admin; }

}

变量设置为私有。只有用户对象才能直接访问数据。但是,其他对象可能想要检索数据,这就是有 4 个公共 get 函数的原因。getPassword 被省略了,因为您可能不希望该密码公开可用。此外,您可以设置一个新的管理员也是可以想象的,因此还添加了一个公共设置器功能。因此,您将实例化新用户(即,获取该类并对其进行真实示例):

$user1 = new User(1);

在使用过程中,您将通过以下方式回显这些变量:

echo $user1->getUsername();

请接受我没有直接回答您的问题的歉意,但这个例子会遇到麻烦。

于 2013-02-24T06:49:02.773 回答