2010-01-21 4 views
4

J'ai une hiérarchie de classes dans PHP 5.2.9.Propriétés de tableau PHP héritées

La classe de base possède une propriété protégée qui est un tableau associatif.

Les classes enfants peuvent ajouter des éléments au tableau.

Les classes enfants sont déclarées dans les fichiers séparés (plugins), qui seront créés et ajoutés par plusieurs développeurs.

Quelle est la meilleure façon d'ajouter les éléments à la propriété dans les classes enfants afin que la déclaration d'un nouvel enfant soit aussi simple que possible?

<?php 
     class A { 
       protected $myproperty = array (
         'A1' => 1, 
         'A2' => 2 
       ); 

       function myprint() 
       { 
         print_r($this->myproperty); 
       } 
     }; 

     class B extends A { 
       // add 'B1', 'B2' to myproperty 
     }; 

     class C extends B { 
       // add 'C1', 'C2' to myproperty 
     }; 

     $c = new C(); 
     $c->myprint(); 
     // The line above should print A1, A2, B1, B2, C1, C2 
?> 

Idéalement, je voudrais le faire pour les développeurs aussi simples que la déclaration d'une variable ou une propriété privée, sans avoir besoin d'un code copypaste.

Répondre

3

Faire usage du constructors des classes héritées, pour la classe B, il deviendrait quelque chose comme ceci:

class B extends A { 
    function __construct() { 
     parent::__construct();    // Call constructor of parent class 
     array_push($myproperty, "B1", "B2"); // Add our properties 
    } 
} 

En va de même pour la classe C.

Si vous avez beaucoup de classes héritées, ou si vous voulez fournir autant de soutien que possible, vous pourriez mettre ce code dans une certaine fonction. Les autres développeurs n'ont donc qu'à appeler cette fonction dans leur constructeur pour «enregistrer» leur enfant.

+0

C'est exactement ce que j'ai d'abord pensé, mais y a-t-il un moyen plus simple? – Quassnoi

+0

Vous pouvez essayer d'automatiser ce processus en utilisant get_class() et ajouter les propriétés dans le constructeur de la classe A. Mais je suppose que c'est beaucoup plus complexe (pour vous au moins). – Veger

+0

Comment faire cela en utilisant 'get_class()'? – Quassnoi

Questions connexes