2009-08-14 6 views

Répondre

2

Ce serait impossible, oui. Rien n'est appelé sur la définition de classe.

Ce concept est même agressivement non supporté; essayez d'écrire

class foo { 
    static function __construct() { 
     echo "hi!"; 
    } 
} 

et vous obtiendrez Fatal error: Constructor blah::__construct() cannot be static.

2

Je suppose que ce que vous essayez de faire est de garder une trace des objets qui sont en cours d'exécution? Pas exactement sûr de ce que votre objectif final est ici.

Peut-être cherchez-vous le ReflectionClass lors de l'exécution? Vous pouvez déterminer si une classe existe et quelle est la classe étendue.

Il semble également que ce que vous visez soit une fabrique d'objets qui garde la trace des objets qui sont utilisés. Recherchez les singletons, l'usine et les concepts de variables/fonctions membres statiques pour ceux-ci.

Quant à ceci: si

classe B
class A 
{ 
public function __construct() 
{ print "A has been called"; 
} 
} 

remplace le constructeur, il ne va pas appeler le constructeur de A. Ex:

class B extends A 
{ 
public function __construct() 
{ print "B has been called"; 
    // parent::__construct(); /// would print out A has been called 
} 
} 

Cependant dans le code, vous pouvez vérifier si B est une instance de l'une des nombreuses façons:

function doSomethingWithA(A $a).... 

function doSmoethingWithA($a) 
{ 
if($a instanceof A) 
{ 
    // blah 
} 
} 

Je ne sais pas si cela aide beaucoup.

+0

Ce serait vraiment utile si je n'étais pas déjà sur cette piste. Merci! J'explore d'autres façons de faire ce dont j'ai besoin. Je construis une couche d'abstraction de base de données appelée Sqool, et c'est vraiment sympa pour l'utilisateur de pouvoir créer une seule classe puis l'utiliser. Le problème est que je sais seulement qu'une "classe sqool" sous-jacente (table) existe si quelqu'un a déjà instancié au moins un objet. La façon dont je prévois de résoudre ceci est que l'utilisateur crée une fonction (avec un nom standard) que je peux appeler si je ne suis pas encore au courant de la classe. Si vous êtes intéressé consultez http://tinyurl.com/o3tz2n –

0

En Java, ce est possible, en utilisant un "agent Java" qui enregistrerait un java.lang.instrument.ClassFileTransformer avec la machine virtuelle Java.

Questions connexes