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およびそれぞれは、UserDetails クラスの特定のインスタンス$activeに関連付けられている特定のユーザーに関連付けられています。

最後に、これらのフィールドは公開しないでください。パブリック フィールドは、クラスの外部から直接アクセスできます。これは、だれでも任意のスクリプトからいつでも public フィールドの値を変更できることを意味します。フィールドをプライベートまたはプロテクトにして、パブリック ゲッター メソッドを介してアクセスする必要があります。

このクラスの基本的なスタブの例を次に示します。

<?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 に答える