2011-09-20 2 views
0

Est-il possible de définir des variables dynamiques ou de toute façon de faire ce qui suit?Création de vars statiques dynamiques dans une classe?

Exemple 1:

class base 
{ 
    protected static $$dynamicVar; 

    protected function myFunction($value) 
    { 
     $dynamicVar = $value; 
     self::$$dynamicVar = new $value(); 
    } 
} 

L'idée derrière ce code est d'instancier de nouveaux objets, sans la classe de base sachant ce que les objets seront instancié. Je sais que l'instanciation de nouveaux objets peut être dynamique mais j'en ai besoin dynamique générée sur des vars statiques.

Merci,

+0

Je sais que je ne peux pas faire de protection protected $$ var. Essayer d'illustrer ce dont j'ai besoin. – Henrique

+1

Quelqu'un s'il vous plaît dites-moi un motif de conception où une telle construction serait nécessaire ... –

Répondre

2

Ce n'est pas possible pour autant que je sache, mais vous pouvez toujours faire quelque chose comme ceci:

class base 
{ 
    protected static $dynProps = array(); 

    protected function myFunction($value) 
    { 
     self::$dynProps[$value] = new $value(); 
    } 
} 

La question plus importante est ici « Pourquoi avez-vous besoin? "

+0

Merci, je vais essayer. Les tableaux sont généralement plus lents que les vars réguliers, mais cela fonctionnera probablement bien. Faire un système où toutes les classes étendent cette base, et cette base est responsable de charger quelques autres classes de base qui seront nécessaires sur toutes les classes enfants, comme une classe db. Je suis en train d'essayer d'éviter que la même classe soit instanciée deux fois si mon système se termine par deux instants de deux classes s'étendant de base et nécessitant db. Donc, il vérifiera si $ dynTempVar n'est pas nul, sinon, il instanciera la classe comme nous l'avons mentionné ci-dessus et ensuite appliquera $ this -> $ dyn = self :: $$ dynTempVar, donc peut l'utiliser avec $ this – Henrique

+0

As Je sais que la seule façon de le faire est d'utiliser des vars statiques qui resteront à leur valeur même sur une classe différente si elle a été définie au début. Appréciez si vous avez un autre moyen de le faire. – Henrique

Questions connexes