2009-01-24 11 views
5

Sé que puede usar get_class ($ this) normalmente, pero necesito obtener el nombre de la clase en una función estática donde el objeto no ha sido instanciado.¿Es posible obtener el nombre de la clase actual de un objeto desinstalado en PHP?

Véase el siguiente código:

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

Es posible que desee editar su pregunta para leer que entiende que $ esto no tiene ningún significado en el caso estático: creo que algunas personas podrían simplemente pensar que no entiende lo que significa '$ this'. Consulte mi respuesta sobre get_called_class, también. –

Respuesta

3

me di cuenta de que puede utilizar __CLASS__ para obtener el nombre de la clase. Ejemplo:

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

Tenga en cuenta que __CLASS__ devolverá la clase donde se define la función. Si lo extiende, no obtendrá la subclase. – troelskn

+1

@troelskn: podría morder al asker por el culo. También debe enviar esto como una respuesta para que más gente lo vea. –

8

creo que estás en busca de la función get_called_class(), si desea obtener el nombre de la clase de un método estático.

Consulte get_called_class documentation para obtener más información.

0

Mi pregunta es, ¿cómo se las arregla para llamar a una función estática sin saber el nombre de la clase en primer lugar?

Las únicas dos maneras en que puedo pensar son:

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 

Tal vez una mejor solución se podrían ofrecer si sabíamos el contexto en el que usted está tratando de hacer la llamada?

+0

Llamo a una clase heredada y hay una instrucción switch() en la clase principal que requiere que el nombre de la clase decida qué hacer –

+0

¿Cuál es la información variable a la que intenta cambiar que requeriría una función estática? –

Cuestiones relacionadas