2009-01-24 8 views
5

Je sais que vous pouvez utiliser get_class ($ this) normalement, mais j'ai besoin d'obtenir le nom de la classe dans une fonction statique où l'objet n'a pas été instancié.Possible d'obtenir le nom de la classe actuelle d'un objet non instancié en PHP?

Voir le code suivant:

class ExampleClass 
{ 
    static function getClassName() 
    { 
     echo get_class($this); // doesn't work unless the object is instantiated. 
    } 
} 

$test1 = new ExampleClass(); 
$test1->getClassName(); // works 

ExampleClass::getClassName(); // doesn't work 
+0

Vous pouvez modifier votre question de lire que vous comprenez que $ cela n'a pas de sens dans le cas statique - Je pense que certaines personnes pourraient penser simplement que vous ne comprenez pas ce que « $ » ce moyen. Voir aussi ma réponse à propos de get_called_class. –

Répondre

3

j'ai compris, vous pouvez utiliser __CLASS__ pour obtenir le nom de la classe. Exemple:

class ExampleClass 
{ 
    static function getClassName() 
    { 
     echo __CLASS__; 
    } 
} 
+7

Notez que __CLASS__ renverra la classe où la fonction est définie. Si vous l'étendez, vous n'obtiendrez pas la sous-classe. – troelskn

+1

@troelskn: pourrait très bien mordre le demandeur dans le cul. Vous devriez soumettre ceci comme réponse aussi pour que plus de gens le voient. –

8

Je pense que vous êtes à la recherche de la fonction get_called_class(), si vous souhaitez obtenir le nom de la classe à partir d'une méthode statique.

Voir get_called_class documentation pour plus d'informations.

0

Ma question est, comment gérez-vous d'appeler une fonction statique sans connaître le nom de la classe en premier lieu?

Les deux seules façons que je peux penser sont:

ExampleClass::getClassName(); //Hard Coded - the class name is hard and visible 
$class = "ExampleClass"; 
$class::getClassName();  //Soft Coded - the class name is the value of $class 

Peut-être une meilleure solution pourrait être proposée si nous savions que le contexte dans lequel vous essayez de faire l'appel?

+0

J'appelle une classe héritée et il y a une instruction switch() dans la classe parente qui exige le nom de classe de décider quoi faire –

+0

Qu'est-ce que les données variables à partir de laquelle vous essayez de changer cela nécessiterait une fonction statique? –

Questions connexes