PHP __DIR__评估运行时(后期绑定)?

时间:2013-08-07 10:14:59

标签: php inheritance dir late-binding

在某种程度上可以获取PHP文件的位置,在运行时进行评估吗?我正在寻找类似于魔术常量__DIR__的东西,但在运行时进行评估,作为后期绑定。与selfstatic类似的区别:

__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似乎并不是选择,这就是为什么我们有继承......

1 个答案:

答案 0 :(得分:7)

您可以在Parent class

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

希望它会有所帮助。