una que modo herencia derivadas derivada codigo clases clase php oop inheritance reflection

php - modo - que es una clase base en c++



¿Cómo obtener la ruta de una clase derivada de un método heredado? (4)

El uso de ReflectionClass::getFileName con esto le dará el nombre de directorio en que se definió la clase Child .

$reflector = new ReflectionClass("Child"); $fn = $reflector->getFileName(); return dirname($fn);

Puede obtener el nombre de clase de un objeto con get_class() :)

¿Cómo obtener el camino de la clase actual, desde un método heredado?

Tengo lo siguiente:

<?php // file: /parentDir/class.php class Parent { protected function getDir() { return dirname(__FILE__); } } ?>

y

<?php // file: /childDir/class.php class Child extends Parent { public function __construct() { echo $this->getDir(); } } $tmp = new Child(); // output: ''/parentDir'' ?>

La constante __FILE__ siempre apunta al archivo fuente del archivo en el que se encuentra, independientemente de la herencia.
Me gustaría obtener el nombre de la ruta para la clase derivada.

¿Hay alguna forma elegante de hacer esto?

Podría hacer algo como $this->getDir(__FILE__); pero eso significaría que tengo que repetirme con bastante frecuencia. Estoy buscando un método que ponga toda la lógica en la clase principal, si es posible.

Actualizar:
Solución aceptada (por Palantir ):

<?php // file: /parentDir/class.php class Parent { protected function getDir() { $reflector = new ReflectionClass(get_class($this)); return dirname($reflector->getFileName()); } } ?>



Sí. Basándose en la respuesta de Palantir:

class Parent { protected function getDir() { $rc = new ReflectionClass(get_class($this)); return dirname($rc->getFileName()); } }


Si está utilizando Composer para carga automática, puede recuperar el directorio sin reflexión.

$autoloader = require ''project_root/vendor/autoload.php''; // Use get_called_class() for PHP 5.3 and 5.4 $file = $autoloader->findFile(static::class); $directory = dirname($file);