PHP Hérité de la méthode parent ne peut pas l'accès de l'enfant à la propriété privée

Tout d'abord: Une tout à fait le même problème a été posté, et en quelque sorte résolu, mais n'est toujours pas répondre à mon problème spécifique. Plus sur cela plus tard.

Dans les mots: j'ai une classe de base qui fournit des méthodes pour tous les enfants, mais ne contiennent pas de propriété. Mon enfant est hériter de ces méthodes, qui devrait être utilisé pour l'accès de l'enfant propriétés.
Si les biens de l'enfant est protected ou public, tous fonctionne bien, mais si les biens de l'enfant est private, il échoue sans erreur (tout ne se passe rien).

Dans le code:

class MyBaseClass {
    public function __set($name, $value) {
        if(!property_exists($this, $name))
            throw new Exception("Property '$name' does not exist!");
        $this->$name = $value;
    }
}

class ChildClass extends MyBaseClass {
    public $publicProperty;
    protected $protectedProperty;
    private $privateProperty;
}

$myChild = new ChildClass();
$myChild->publicProperty = 'hello world';    //works of course!
$myChild->protectedProperty = 'hello world'; //works as expected
$myChild->privateProperty = 'hello world';   //doesn't work?

Le ci-dessus mentionné problème similaire ont la solution pour utiliser la magie __set() méthode pour accéder aux propriétés privées, mais ce que je fais déjà. Si j'en œuvre __set() à l'intérieur de l'enfant, il fonctionne bien, mais l'idée est que l'enfant hérite de la __set() de son parent, mais évidemment il ne peut pas accéder à l'enfant privé de méthode.

Est que sur le but? Suis-je doinf quelque chose de mal? ou est-ce mon approche c'est de la merde?

De fond:
Mon idée de départ était: l'ensemble de La dynamique chose à propos de __set() est quelque chose que je n'aime pas. Généralement une propriété privée doit jamais être accessibles de l'extérieur, j'ai donc mis en œuvre en jetant __et __get-méthodes dans mon ultime de la classe de base (à partir de laquelle toutes les classes héritent).

Maintenant, je veux dynamicially frayer une instance à partir d'un fichier XML et, par conséquent, ont besoin d'accéder aux propriétés. J'ai fait de la règle, que toute XML-instantiatable les besoins de la classe pour mettre en œuvre la magie __set() méthode et peut donc être créé dynamicially. Au lieu de la mettre en œuvre, dans chaque Classe, qui pourrait être engendré un jour, j'ai décidé de les faire hériter d'une classe appelée comme class Spawnable { } qui fournit le nécessaire, __set-méthode.

Cela ne devrait pas fonctionner... Ce $myChild->protectedProperty = 'hello world'; doit générer une erreur Fatale... Même que le privateProperty. php.net/manual/en/language.oop5.visibility.php

OriginalL'auteur Jan | 2010-10-26