Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP扩展类继承_Php - Fatal编程技术网

PHP扩展类继承

PHP扩展类继承,php,Php,我有一个我正在扩展的基类,但是我不能理解为什么我在基类中定义的变量不能被子类访问。我知道它们必须得到保护才能允许访问,但它们仍然不适合我 class user { protected static $username; protected static $password; protected static $remember; function __construct() { } public function login($userna

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

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

    }
}

因为变量应该是非静态的。 如果您想要静态变量(如您所知),它应该是这样的

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

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

您需要这样做:

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

除了静态变量外,它们在显示的程序流中没有初始化。@WilliamHand-上面的操作对您有效吗?这是您所需要的吗?@WilliamHand-更像是为了声誉和接受。我同意这更有意义,但我不断得到意外的T_字符串,当我运行最后一行时需要T_变量或“$”-不确定为什么?除了这一点,代码中仍然有一个错误(即将修复)。错误显示在哪一行?我页面中调用类页面的第1行,也就是最后一行。