2012-10-03 14 views
5

Duplicar posibles:
Get class name from extended classObtener el nombre de clase de la clase CONSTRUIR

Supongamos que tengo los siguientes:

class Foo 
{ 
    public $name; 

    public __construct() 
    { 
    $this->name = __CLASS__; 
    } 
} 

class Bar extends Foo 
{ 
} 

class FooBar extends Foo 
{ 
} 

$bar = new Bar(); 
echo $bar->name; // will output 'Foo', but I want 'Bar' 

$foobar = new FooBar(); 
echo $foobar->name; // will output 'Foo', but I want 'FooBar' 

¿Hay una manera de conseguir el nombre de la clase de construcción, sin establecer el nombre en una clase extendida, por ejemplo poniendo el nombre en la clase Foo?

Nota: Tengo mucha clase derivada de Foo, establecer el nombre en cada clase derivada sería una gran cantidad de codificación.

+0

¿Qué hay de 'get_class()' y todos los demás asociados fctns? – Havelock

Respuesta

0

Hay una estructura en función de PHP para obtener el nombre de la clase get_class()

$fooBar = new FooBar(); 
echo get_class($fooBar); //will output FooBar 
3

Esto es muy fácil: sólo tiene que utilizar get_called_class:

$this->name = get_called_class(); 

Esto es parte de las características de unión estáticas finales introducidas en PHP 5.3. Se refiere a la clase llamada, en lugar de la clase donde se define el método.

+2

Probablemente no sea necesario (y para una dependencia de> = 5.3 tampoco), ya que '__construct' no es realmente un método estático (tiene acceso a' $ this') – lanzz

Cuestiones relacionadas