2013-02-10 3 views
0

나는 확장하고있는 기본 클래스가 있지만 기본 클래스에서 정의하는 변수가 하위 클래스에서 액세스 할 수없는 이유는 무엇인지 알 수 없습니다. 나는 그들이 접근을 허용하기 위해 보호되어야한다는 것을 이해했지만 여전히 나를 위해 일하지 않을 것이다.PHP 확장 클래스 상속

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

    } 
} 
+0

는, 그들은 표시 프로그램의 흐름에 초기화되지 않습니다. – scones

답변

1

당신 변수는 정적이며 더 나은의 이해를 계승.

이 대신해야 정적 인 변수 외에도

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

@WilliamHand - 위 내용이 귀하에게 적합하며 필요한 것입니까? –

+0

네, 치료를 해주는데, 고마워요! –

+0

@WilliamHand - 오히려 평판과 아마도 수용을위한 하나. –

0

변수는 정적이 아니어야하기 때문입니다. 당신이 (당신이 알고 같은)가 그

print("user is: " . self::$username); 
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'); 
+0

동의하는 편이 낫겠지 만 T_VARIABLE 또는 '$'를 기대하면서 예기치 않은 T_STRING이 계속 발생합니다. 이유는 확실하지 않습니다. –

+0

요점 외에, 나는 여전히 (대략 고쳐질) 코드에서 오류가있다. 어떤 줄에 오류가 나타 납니까? – scones

+0

클래스 페이지를 호출하는 내 페이지의 라인 1, 별개로 마지막 라인. –