PHP扩展类继承


PHP extended class inheritance

我有一个正在扩展的基类,但我不明白为什么我在基类中定义的变量不能被子类访问。我知道他们必须受到保护才能允许访问,但他们仍然不适合我

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();
    }
}

基类中的变量是静态的,可以更好地理解继承。

你需要这个:

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);

因为变量应该是非静态的。如果你想要静态变量(就像你所知道的),它应该看起来像

print("user is: " . self::$username);

这将更有意义:

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');