2017-10-12 7 views
0

J'ai vu quelques questions à propos de l'accès à un attribut de classe parent (comme PHP Accessing Parent Class Variable) mais j'ai l'impression de lutter dans un cas énervé (je n'ai pas besoin de ce modèle, mais de curiosité ...):Accéder à une propriété PHP surchargée

Que faire si la classe enfant remplace une variable de classe parente et souhaite toujours y accéder?

Exemple:

class A { 
    protected $x = 'a'; 
} 

class B extends A { 
    protected $x = 'b'; 
    public function showX() { 
    var_dump(array(
     'this->x' => $this->x, 
     'parent->x' => '??', 
    } 
} 

$b = new B(); 
$b->showX(); 

Sans compter sur une méthode getX() sur parent (et utiliser un parent::getX() dans la classe B ou tout simplement un $this->getX() si B ne pas remplacer cette méthode getX), comment obtenir un résultat comme:

this->x: 'b' 
parent->x: 'a' 

comme http://php.net/manual/pl/keyword.parent.php#94177 états, en utilisant un parent::$x ne fonctionnera pas, parce qu'il rechercherait l'attribut statique non existant $x. Tout moyen de travail?

+3

Une fois que vous avez écrasé 'parent :: $ x' ... il est écrasé. Pas vraiment différent de réaffecter procédurellement une variable plus tard dans le script - vous ne pouvez pas récupérer la valeur d'origine. – CD001

+0

Vous pouvez ajouter un getter pour 'x' dans le parent, puis redeclare' A' et utiliser le getter - https://repl.it/M6uV –

+0

Ce que vous essayez de faire est de donner une valeur à une variable, puis écraser la valeur et ensuite vous voulez obtenir la valeur précédente. –

Répondre

1

Qu'est-ce que vous demandez en est:

si j'overrite une valeur, mais encore envie la valeur ancienne?

Ensuite, il n'y a qu'une seule solution simple. Vous créez une autre variable et la stockez là avant de la dépasser.

+1

C'était ce que je pensais; mais connaissant certains trucs PHP et les moyens d'y aller ... ça valait la peine de se demander! – Xenos