我是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
例如?
答案 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();
请接受我的道歉,因为我没有直接回答你的问题,但这个例子很难解决。