46 votes

Variable de classe parente d'accès PHP

class A {
    private $aa;
    protected $bb = 'parent bb';

    function __construct($arg) {
       //do something..
    }

    private function parentmethod($arg2) {
       //do something..
    }
}

class B extends A {
    function __construct($arg) {
        parent::__construct($arg);
    }
    function childfunction() {
        echo parent::$bb; //Fatal error: Undefined class constant 'bb' 
    }
}

$test = new B($some);
$test->childfunction();

Question : Comment afficher la variable parent dans l'enfant ? Le résultat attendu fera écho à 'parent bb'

7voto

Nicola Peluchetti Points 38948

Faites-le simplement écho car il a hérité de

echo $this->bb;

5voto

corretge Points 680

Avec parent::$bb;, vous essayez de récupérer la constante statique définie avec la valeur de $bb.

Au lieu de cela, faites :

echo $this->bb;

Remarque : vous n'avez pas besoin d'appeler parent::_construct si B est la seule classe qui l'appelle. Il suffit de ne pas déclarer __construct en classe B.

4voto

FinalForm Points 2379

$ bb est maintenant devenu le membre privé de la classe B après avoir étendu la classe A où il était protégé.

Donc vous accédez à $ bb comme si c'était un attribut de classe B.

class A {
    private $aa;
    protected $bb = 'parent bb';

    function __construct($arg) {
       //do something..
    }

    private function parentmethod($arg2) {
       //do something..
    }
}

class B extends A {
    function __construct($arg) {
        parent::__construct($arg);
    }
    function childfunction() {
        echo $this->bb; 
    }
}

$test = new B($some);
$test->childfunction();

4voto

user2147836 Points 63
class A {
    private $aa;
    protected $bb = 'parent bb';

    function __construct($arg) {
       //do something..
    }

    private function parentmethod($arg2) {
       //do something..
    }
}

class B extends A {
    function __construct($arg) {
        parent::__construct($arg);
    }
    function childfunction() {
        echo parent::$this->bb; //works by M
    }
}

$test = new B($some);
$test->childfunction();`

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X