PHP accès à la Variable de classe Parent
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? résultat escompté echo 'parent bb'
6 réponses
echo $this->bb;
la variable est héritée et n'est pas privée, elle fait donc partie de l'objet courant.
Voici des renseignements supplémentaires en réponse à votre demande pour plus d'informations sur l'utilisation de parent::
:
Utiliser parent::
quand vous voulez ajouter fonctionnalité supplémentaire à une méthode de la classe parent. Par exemple, imaginez un Airplane
catégorie:
class Airplane {
private $pilot;
public function __construct( $pilot ) {
$this->pilot = $pilot;
}
}
Maintenant, supposons que nous voulons créer un nouveau type d'Avion dispose également d'une Navigator. Vous pouvez étendre la méthode _ _ construct () pour ajouter la nouvelle fonctionnalité, mais utilisez quand même la fonctionnalité offerte par le parent:
class Bomber extends Airplane {
private $navigator;
public function __construct( $pilot, $navigator ) {
$this->navigator = $navigator;
parent::__construct( $pilot ); // Assigns $pilot to $this->pilot
}
}
De cette façon, vous pouvez suivre l' principe DRY de développement tout en fournissant toutes les fonctionnalités que vous désirez.
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();`
parent::$bb;
vous essayez de récupérer la statique constante 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. Suffit de ne pas déclarer __construire dans la classe B.
$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 la 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();
toutes les propriétés et méthodes de la classe parent sont héritées dans la classe enfant donc théoriquement vous pouvez y accéder dans la classe enfant mais attention en utilisant le protected
mot-clé dans votre classe parce qu'il provoque une erreur fatale lorsqu'il est utilisé dans la classe enfant.
comme indiqué dans le php.net
La visibilité d'une propriété ou d'une méthode peut être défini par le préfixe déclaration avec les mots-clés public, protected ou private. Les membres de la classe accès au public déclaré partout. Membres déclarés protégés accessible uniquement dans la classe elle-même et par héritage et parent classe. Membres déclarés privés ne peut être accédé que par la classe qui définit le membre.