Je me rends compte que c'est super-vieux, mais au cas où quelqu'un d'autre a besoin d'un indice ...
Avez-vous envisagé d'utiliser des variables statiques?
Le modèle de conception PHP POO est telle que statiquement variables déclarées dans une classe parent restent les mêmes dans l'enfant classe aussi.
Par exemple ...
<?php
class A {
public static $test = 'a';
public function test() {
echo 'Test is: '.self::$test;
}
}
class B extends A {
public static $test = 'b';
}
$obj = new B;
$obj->test();
?>
L'exécution de ce code (sur PHP 5.3- Je suis sûr que c'est la même pour les autres versions, aussi) vous donnera le résultat suivant:
test est: un
De ce que j'ai pu rassembler dans votre OP, vous cherchez un moyen pour les variables de classe parent rester pour rester - même dans les classes étendues. Cela résout ce problème.
Pour appeler les variables publiquement en dehors de la portée de la classe (là où vous auriez normalement écrire obj- $> vars), vous aurez besoin de créer une fonction dans la classe parente qui fait référence à self::$variable_name
afin qu'il puisse renvoie cette variable au code qui utilise cette classe ou toute autre classe qui l'étend.
Par exemple, quelque chose comme:
public function get_variable() {
return self::$variable;
}
Vous pouvez également créer une méthode magique qui dynamiquement rejettera l'auto :: $ variable en fonction de ce que vous demandez l'instance pour - à savoir une méthode ou une variable . Vous pouvez câbler le code pour rejeter l'équivalent de la variable self :: $ dans tous les cas.
Lisez http://php.net/manual/en/language.oop5.magic.php pour plus d'informations sur les différentes méthodes magiques qui vous permettent de faire ce genre de choses. L'OP était un peu énigmatique, donc je ne savais pas si c'était exactement ce que vous vouliez, mais je n'ai vu personne d'autre ici référencer des variables statiques alors je pensais que j'aurais pu entrer - j'espère que ça aide!
Je ne comprends pas. Je serais plus qu'heureux de répondre à votre question mais ce n'est pas assez clair. Voulez-vous construire "étendu" comme ($ obj = new étendu ($ main)) ou cherchez-vous des vars statiques? – nlaq