PHP variable Privée de l'accès de l'enfant
donc je suis en train de travailler sur un problème que je vais avoir dans la conception des classes PHP. J'ai créé une classe de base, et affectés à des variables privées. J'ai des enfants des classes de l'extension de cette classe de base, qui font référence et les modifications de ces variables privées via les fonctions de la classe de base. Voici un exemple, gardez à l'esprit que je suis encore confus à propos de la différence entre private
et protected
méthodes/variables (laissez-moi savoir si je le fais mal!):
base.class.php
<?php
class Base {
private $test;
public function __construct(){
require('sub.class.php');
$sub = new Sub;
echo($this->getTest());
}
public function getTest(){
return $this->test;
}
protected function setTest($value){
$this->test = $value;
}
}
?>
sub.class.php
<?php
class Sub extends Base {
public function __construct(){
parent::setTest('hello!');
}
}
?>
Donc j'attendrait le résultat à hello!
imprimé sur l'écran - à la place, il n'y a rien. Il pourrait y avoir une incompréhension fondamentale des classes de ma part, ou peut-être je suis juste de faire quelque chose de mal. De toute orientation est très apprécié! Merci.
EDIT:
Merci à tous ceux qui ont contribué d'une réponse - je pense que, malgré les excellentes solutions, que les enfants des classes ne sont pas réellement ce dont j'ai besoin -, il semble délégué de classe peuvent être plus utile, à ce point, que je n'ai pas vraiment besoin de faire référence à la Base de fonctions de dans les autres classes.
Essayez de PHP5 POO.
Il n'y a aucune
echo
ou print
à la sortie de quelque chose sur l'écranÇa a marché... Mais ce qui peut être pratique pour mes fins.
Donc, avez-vous rencontré extension php runkit, il vous permet de changer quoi que ce soit/quelque propriété que ce soit privé, au moment de l'exécution
OriginalL'auteur iLoch | 2012-05-31
Vous devez vous connecter pour publier un commentaire.
Devrait ressembler à ceci:
base.class.php:
sub.class.php:
code principal:
parent::
avec$this->
Ok, je peux voir pourquoi cela fonctionne contrairement à la mienne, je pense. Est-il possible que je peut faire référence à la setTest fonction de la mère de l'enfant de la fonction, de sorte que le code
$this->test = $value
définit la variable pour le parent, par opposition à l'enfant? J'aimerais, à terme, de ne pas avoir à faire des appels, si je peux les faire à partir de l'enfant du constructeur. En gros, je veux accéder à la mère fonctions, de ne pas hériter.Je ne suis pas tout à fait comprendre ce que vous entendez, mais jetez un oeil à mon édité code. C'est cela que vous voulez?
Essentiellement, oui. Je peux comprendre comment il peut être compliqué à comprendre, j'ai l'impression que mon interprétation n'est pas la façon dont il devrait être fait. Permettez-moi d'essayer d'élaborer des.. j'ai la base et l'enfant. Je veux que l'enfant de manipuler la base de la fonction de variabless de sorte que lorsqu'il appelle la setTest fonction, la référence à
$this
est en se référant à la fonction de base, pas l'enfant qui (dans votre exemple) a hérité de cette fonction à partir de la base. Est-ce possible? Ainsi, au lieu d'hériter d'une fonction, je veux simplement utiliser de sorte que les références à$this
sont conservés dans le champ d'application d'origine (la base)Une façon vous pouvez peut-être penser que c'est si à la fois le
setTest
etgetTest
fonctions, au lieu d'utiliser$this->
utiliséBase::
de sorte que les variables étaient toujours écrit/lu/à partir de la classe de base, et non pas les classes enfant.OriginalL'auteur flowfree