在某种程度上可以获取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
似乎并不是选择,这就是为什么我们有继承......
答案 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);
}
}
希望它会有所帮助。