3

我有一个关于用户详细信息的课程。我想从我的应用程序中调用例如 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;
        }
    }

}
4

2 回答 2

3

我认为您应该阅读 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();
于 2013-08-11T07:43:55.327 回答
2

您不能将静态属性初始化为另一个变量、函数返回值或对象。

我觉得你应该看看文档: http: //php.net/manual/en/language.oop5.static.php

于 2013-08-11T07:56:58.377 回答