2013-02-10 5 views
0

J'ai une classe de base que j'étend, mais je ne peux pas expliquer pourquoi les variables que je définis dans la classe de base ne sont pas accessibles par la classe enfant. J'ai compris qu'ils devaient être protégés pour permettre l'accès, mais ils ne fonctionneraient toujours pas pour moi.Héritage de classe étendue 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

En plus des variables étant statiques, elles ne sont pas initialisés dans le flux de programme affiché. – scones

Répondre

1

Vous variables dans la classe de base sont statiques et mieux comprendre de héritage.

Vous avez besoin de ce lieu:

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 - Est-ce que ce qui précède fonctionne pour vous et est ce que vous avez besoin? –

+0

Oui ça marche un régal, merci! –

+0

@WilliamHand - Plutôt un pour la réputation et peut-être un accepter. –

0

Parce que les variables doivent être non statiques. Si vous voulez des variables statiques (comme vous ne le savez), il devrait ressembler à ça

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

ce serait plus logique:

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

Je suis d'accord a plus de sens, mais j'ai continué à obtenir T_STRING inattendu, en attendant T_VARIABLE ou '$' quand j'ai couru cette dernière ligne - je ne sais pas pourquoi? –

+0

en plus du point, où j'ai toujours une erreur dans le code (sur le point d'être corrigé). sur quelle ligne l'erreur apparaît-elle? – scones

+0

Ligne 1 de ma page qui appelle la page de classe, alias exclusivement la dernière ligne. –

Questions connexes