2010-07-03 11 views
0

J'ai deux objets séparés, un principal et un "enfant". C'est physiquement pas un vrai objet enfant, parce que j'ajoute le parent entier à travers le constructeur à l'enfant.Tunneling deux objets ou plus

Comme ceci:

class core 
{ 

    public function __get($class) 
    { 
     $this->load($class); 
    } 

    public function load($class, $file = null, $lib = true) 
    { 
     if($file == null) 
      $file = $class; 

     if($lib == true) 
      include(LIBPATH.$file.PHP); 
     else 
      include(SYSPATH.$file.PHP); 

     $this->$class = new $class($this); 
    } 

} 

Et le "enfant":

class Child implements myStruct 
{ 
    public function __construct($obj) 
    { 
     $this->obj =& $obj; 
    } 
} 

Est-ce aussi laid que je pense, ou est cette solution acceptable?

Répondre

3

C'est définitivement sous-optimal. Premier:

$this->obj =& $obj; 

Ceci n'est pas nécessaire. Depuis PHP 5, les objets sont référencés dans l'espace utilisateur à travers des références. Lorsque vous copiez un objet, vous copiez en fait une référence. Vous pouvez supprimer l'opérateur de référence ici: $this->obj = $obj.

Regardez spl_autoload pour les classes de chargement automatique. Ce n'est pas équivalent à ce que vous faites - vous utilisez une sorte de conteneur pour contenir des références à des objets (et un seul objet par classe), mais je suppose que c'est ce que vous voulez.

+0

Je considère que spl_autoload n'est pas bon pour ce que je veux, car la classe de base a besoin de charger plusieurs objets. Souvent stockés dans différents dossiers –

+1

Vous pouvez placer ces différents dossiers dans le chemin d'accès inclus, ou vous pouvez transmettre 'spl_autoload_register' une fonction personnalisée qui implémente votre logique. – Artefacto