在Symfony2中,我看到了如下代码:
if (null === $this->rootDir) {
$r = new \ReflectionObject($this);
$this->rootDir = dirname($r->getFileName());
}
为什么不使用__DIR__
?
if (null === $this->rootDir) {
$this->rootDir = __DIR__;
}
他们之间有什么区别?
答案 0 :(得分:5)
__DIR__
返回调用它的文件的目录。 Symphony2代码返回定义类的目录,该目录很可能是另一个文件。
答案 1 :(得分:2)
正如PHP手册所述:
因此,这些常量总是返回使用的文件的路径。但是,我认为这不是您引用的代码段中的预期行为。可能代码驻留在某个基类中,而可以从扩展类调用它。如果我们想要获得当前类的路径,第一种方法是正确的。
答案 2 :(得分:0)
__DIR__
仅存在于PHP 5.3中。在5.3之前,我们必须使用dirname(__FILE__)
或类似的东西。
答案 3 :(得分:0)
我认为这是因为__DIR__
将返回最初调用的脚本目录。在代码示例中,您将获得对象类的目录。我可能错了,虽然没有尝试过,但如果我是的话,请纠正我。