如何在类中检索数组变量

时间:2013-02-24 06:35:58

标签: php arrays class object

我是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例如?

3 个答案:

答案 0 :(得分: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'];

答案 1 :(得分: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;
  }
}

答案 2 :(得分: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();

请接受我的道歉,因为我没有直接回答你的问题,但这个例子很难解决。