如何从继承的方法获取派生类的路径?

2022-08-30 11:24:36

如何从继承的方法获取当前类的路径?

我有以下几点:

<?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());
      }
   }
?>

答案 1

使用ReflemClass::getFileName,你会得到定义类的dirname。Child

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

您可以使用 get_class() :) 获取对象的类名


答案 2

是的。基于Palantir的回答:

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

推荐