2011-12-03 30 views
8

Digamos que tengo dos archivos, cada uno tiene una clase. ¿Cómo puedo obtener el nombre de archivo donde está la clase secundaria, dentro de la clase padre?obtener el nombre de archivo de la clase extendida

Archivo 2 (clase hija):

class B extends A{ 

} 

Archivo 1:

class A{ 

    final protected function __construct(){ 
    // here I want to get the filename where class B is, 
    // or whatever class is the child 
    } 

} 
+2

¿Cómo se instancian las clases con ese constructor protegido? – Phil

+0

¿Desea la clase principal, para saber mágicamente la ubicación de una única clase infantil arbitraria de alguna manera cuando está construida? Eso no es fácilmente posible, y realmente no tiene ningún propósito. ¿Qué estás tratando de hacer exactamente? Es probable que haya una mejor manera de lograr su objetivo final real. –

Respuesta

15

No realmente seguro de lo que es su propósito, pero aquí van:

class A{ 

    final protected function __construct(){ 
    $obj = new ReflectionClass($this); 
    $filename = $obj->getFileName(); 
    } 

} 
+0

¿No sería [ReflectionObject] (http://php.net/manual/en/class.reflectionobject.php) la opción correcta allí? – Phil

+0

Debería cambiar la accesibilidad del constructor a 'public'. – webbiedave

+2

@webbiedave Es difícil saber cómo los OP están creando objetos con ese constructor protegido, pero pueden tener sus razones. Tal vez tengan un método de fábrica público, estático en 'A' – Phil

3

Puede hacer trampa y usar debug_backtrace:

class A { 
    final protected function __construct() { 
    $stacktrace = @debug_backtrace(false); 
    $filename = $stacktrace[0]['file']; 
    } 
} 
Cuestiones relacionadas