Возможно ли получить местоположение файла PHP, оцененного во время выполнения? Я ищу что-то похожее на магическую константу __DIR__
, но оценивается во время выполнения, как последнее связывание. Аналогичная разница с self
и static
:
__DIR__ ~ self ??? ~ static
Моя цель – определить метод в абстрактном классе, используя __DIR__
который будет оцениваться соответственно для каждого класса наследников. Пример:
abstract class Parent { protected function getDir() { // return __DIR__; // does not work return <<I need this>>; // } } class Heir extends Parent { public function doSomething() { $heirDirectory = $this->getDir(); doStuff($heirDirectory); } }
Очевидно, что эта проблема возникает только в том случае, если Parent
и Heir
находятся в разных каталогах. Пожалуйста, учтите это. Кроме того, определение getDir
снова и снова в разных классах Heir, похоже, не является и вариантом, поэтому у нас есть наследование …
Вы можете добавить следующий код в метод getDir класса Parent
$reflector = new ReflectionClass(get_class($this)); $filename = $reflector->getFileName(); return dirname($filename);
Ваш родительский класс будет выглядеть следующим образом:
abstract class Parent { protected function getDir() { $reflector = new ReflectionClass(get_class($this)); $filename = $reflector->getFileName(); return dirname($filename); } }
Надеюсь, это поможет.