2010-01-26 9 views
43

im creando una función de registro que registrará mis errores en un archivo.obtener la clase y el método actuales?

pensé que contendrá el que la clase y el método se produjo el error en.

¿hay alguna manera de la tala en el que la clase y el método se produjo el error en lo que no tengo que escribir manualmente cada vez?

+0

Es posible que desee proporcionar más información sobre su clase de logger y cómo se va a llamar. – Gordon

Respuesta

65

No soy grande en PHP, pero creo que tiene "constantes mágicas" similares a C/C++. Echar un vistazo here: Esto parece indicar que podría utilizar

__LINE__, __FILE__, __FUNCTION__, __CLASS__, and __METHOD__ 
+1

Si se llama en la declaración de clase principal de una función, esto devuelve el elemento principal, no la clase extendida – paullb

+1

Puede encontrar todas las constantes predefinidas aquí: http://php.net/manual/en/language.constants.predefined. php – Ramazan

5

get_called_class() obtener la clase actual. Esto también podría ser interesante: debug_print_backtrace().

+0

no es cierto. Obtiene la última clase de enlace estático. – Gordon

+0

Tienes razón, olvidé el contexto porque lo acabo de usar mañana. Pero podría ser interesante de todos modos? – Thomas

5

utilizar la constante __METHOD__ en PHP5

35

En el caso de que su en una clase padre/base, __CLASS__ devolverá el nombre de la clase padre/base que no es deseado En ese caso se puede utilizar get_class():

get_class($this) 
+4

¡Esto no funcionará en un entorno estático! –

+0

Esto obtiene la clase secundaria incluso si está en un método definido en el elemento primario. – paullb

3

en las versiones actuales de PHP (5.5 o superior), debe usar static::class

Funciona tanto en los métodos estáticos y de instancia y devuelve el nombre de la clase real, incluso si el método cuerpo fue definido en una superclase.

+0

En PHP 7.1 si el cuerpo del método se definió en una superclase static :: class devuelve el nombre de la superclase – g4b0

+0

@ g4b0 no, no es así. Acabo de probar este script con PHP 7.1.8: 'clase A {función f() {return static :: clase;}} clase B extends A {} $ b = new B; echo $ b-> f(); 'e imprime B correctamente, incluso si el método se definió en A. – Tobia

+0

No se olvide de la diferencia entre' self' y 'static'. 'static' se referirá a la clase a la que se llama, mientras que' self' es la clase en la que se creó. – skerit

1

En Laravel 5 CLASE devolvía el espacio de nombre y el nombre de clase, por lo que era una cadena grande. Así que esta es la forma de obtener la clase actual sin todas esas otras cosas:

echo (new \ReflectionClass($this))->getShortName(); 
Cuestiones relacionadas