Как получить путь текущего класса от унаследованного метода?
У меня есть следующее:
<?php // file: /parentDir/class.php
class Parent {
protected function getDir() {
return dirname(__FILE__);
}
}
?>
и
<?php // file: /childDir/class.php
class Child extends Parent {
public function __construct() {
echo $this->getDir();
}
}
$tmp = new Child(); // output: '/parentDir'
?>
__FILE__
постоянный всегда указывает на исходный файл файла, это находится в, независимо от наследования.
Я хотел бы получить название пути для производного класса.
Есть ли какой-либо изящный способ сделать это?
Я мог сделать что-то вроде $this->getDir(__FILE__);
но это означало бы, что я должен повторить меня довольно часто. Я ищу метод, который помещает всю логику в родительский класс, если это возможно.
Обновление:
Принятое решение (Palantir):
<?php // file: /parentDir/class.php
class Parent {
protected function getDir() {
$reflector = new ReflectionClass(get_class($this));
return dirname($reflector->getFileName());
}
}
?>
Использование ReflectionClass :: getFileName
с этим даст вам имя каталога, для которого определен класс Child
.
$reflector = new ReflectionClass("Child");
$fn = $reflector->getFileName();
return dirname($fn);
Вы можете получить имя класса объекта с помощью get_class ()
:)
Да. Основываясь на ответе Palantir:
class Parent {
protected function getDir() {
$rc = new ReflectionClass(get_class($this));
return dirname($rc->getFileName());
}
}