0

拡張している基本クラスがありますが、基本クラスで定義している変数が子クラスからアクセスできない理由がわかりません。アクセスを許可するには保護する必要があることは理解しましたが、それでも機能しません。

class user {

    protected static $username;
    protected static $password;
    protected static $remember;

    function __construct() {

    }

    public function login($username, $password, $remember) {

        $this->username = $username;
        $this->password = $password;
        $this->remember = $remember;

        $login = new login();

    }

}

class login extends user {

    function __construct() {

        print("user is: " . $this->username);

        die();

    }
}
4

3 に答える 3

0

変数は非静的でなければならないためです。静的変数が必要な場合(ご存知のように)、次のようになります

print("user is: " . self::$username);
于 2013-02-10T13:44:27.353 に答える
0

これはより理にかなっています:

class user {

    protected $username;
    protected $password;
    protected $remember;

    public function __construct($username, $password, $remember) {
        $this->username = $username;
        $this->password = $password;
        $this->remember = $remember;
    }

    public static function login($username, $password, $remember) {
        return new login($username, $password, $remember);
    }

}

class login extends user {

    public function __construct($username, $password, $remember) {
        parent::__construct($username, $password, $remember);

        print("user is: " . $this->username);

        die();

    }
}

$foo = new user::login('foo', 'bar', 'meh');
于 2013-02-10T13:49:14.013 に答える
0

基本クラスの変数は静的であり、継承をよりよく理解しています。

代わりにこれが必要です:

class user {

    protected $username;
    protected $password;
    protected $remember;

    public function __construct($username, $password, $remember) {
        $this->username = $username;
        $this->password = $password;
        $this->remember = $remember;
    }
}

class login extends user {

    public function __construct($username, $password, $remember) {
        parent::__construct($username, $password, $remember);
        print("user is: " . $this->username);
    }
}

$user = new login('joe bloggs', 'a password', TRUE);
于 2013-02-10T13:51:08.787 に答える