6

是否有可能获得在运行时评估的 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);
  }
}

显然,这个问题只有在ParentHeir位于不同目录时才会出现。请考虑到这一点。此外,getDir在各种继承人类中一遍又一遍地定义似乎不是一个选项,这就是我们有继承的原因......

4

1 回答 1

8

您可以在 Parent 类的 getDir 方法中添加以下代码

$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);
    }
}

希望它会有所帮助。

于 2013-08-07T10:41:16.110 回答