我有一个用户详细信息的课程.
我想从我的应用程序中调用例如UserDetails :: $email,但它是空的,因为它不执行构造函数.我该怎么解决这个问题?
<?PHP
class UserDetails {
public static $email;
private $password;
public static $role;
public static $active;
public function __construct() {
$auth = Zend_Auth::getInstance();
if ($auth->hasIdentity()) {
$this->email = $auth->getIdentity()->email;
$this->password = $auth->getIdentity()->password;
$this->role = $auth->getIdentity()->role;
$this->active = $auth->getIdentity()->active;
}
}
}
解决方法:
我想你应该阅读OOP基础知识.你的班级有一些重大错误.
首先,您的构造函数不会设置$email,$role或$active.您将这些字段声明为静态.静态字段只能从静态上下文访问.构造函数不是静态上下文.
如果你想要那些字段是静态的 – 你没有 – 你可以从这样的静态方法设置它们:
public static function setEmail($email)
{
self::$email = $email;
}
这些字段没有理由是静态的.每个$email,$role和$active都绑定到绑定到UserDetails类的特定实例的特定用户.
最后,这些领域不应该是公开的.公共字段可以直接从课外访问.这意味着任何人都可以随时从任何脚本更改公共字段的值.您应该将字段设为私有或受保护,并通过公共getter方法访问它们.
以下是此类的基本存根可能如下所示的示例:
<?PHP
class user {
private $firstName;
private $lastName;
private $email;
private $password;
private $role;
public function __construct($firstName, $lastName, $email, $password, $role)
{
$this->firstName = $firstName;
$this->lastName = $lastName;
$this->email = $email;
$this->password = $password;
$this->role = $role;
}
public function getFirstName()
{
return $this->firstName;
}
public function getLastName()
{
return $this->lastName;
}
public function getEmail()
{
return $this->email;
}
public function getRole()
{
return $this->role;
}
}
你会像这样使用这个类:
你会像这样使用它:
$don_draper = new user('Donald', 'Draper, 'dondraper@gmail.com', '123xYz', 'admin');
$email = $don_draper->getEmail();