Как получить путь производного класса от унаследованного метода?

Как получить путь текущего класса от унаследованного метода?

У меня есть следующее:

<?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());
      }
   }
?>
39
задан Community 23 May 2017 в 10:31
поделиться

2 ответа

Использование ReflectionClass :: getFileName с этим даст вам имя каталога, для которого определен класс Child .

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

Вы можете получить имя класса объекта с помощью get_class () :)

69
ответ дан 27 November 2019 в 02:07
поделиться

Да. Основываясь на ответе Palantir:

   class Parent  {
      protected function getDir() {
         $rc = new ReflectionClass(get_class($this));
         return dirname($rc->getFileName());
      }
   }
30
ответ дан 27 November 2019 в 02:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: