Php __使用反射的DIR\uv

Php __使用反射的DIR\uv,php,symfony,Php,Symfony,在Symfony2中,我看到如下代码: if (null === $this->rootDir) { $r = new \ReflectionObject($this); $this->rootDir = dirname($r->getFileName()); } 为什么不直接使用\uuuuuuuuuuuuuuuuu if (null === $this->rootDir) { $this->

在Symfony2中,我看到如下代码:

    if (null === $this->rootDir) {
        $r = new \ReflectionObject($this);
        $this->rootDir = dirname($r->getFileName());
    }
为什么不直接使用
\uuuuuuuuuuuuuuuuu

    if (null === $this->rootDir) {
        $this->rootDir = __DIR__;
    }

它们之间的区别是什么?

\uuuuu DIR\uuuu
仅存在于PHP5.3中。在5.3之前,我们必须使用
dirname(\uuuuu FILE\uuuuu)
或类似的东西。

我认为这是因为
\uuuuu DIR\uuuuuu
将返回最初调用的脚本目录。在代码示例中,您将获得对象类的目录。我可能是错的,虽然我还没有尝试过这个,请纠正我任何人,如果我是

\uuuu DIR\uuuu
返回调用文件的目录。Symphony2代码返回定义类的目录,该目录很可能是另一个文件。

正如PHP手册所述:

  • DIR返回文件的目录。如果在包含中使用,则返回包含文件的目录
  • 文件返回文件的完整路径和文件名。如果在包含中使用,则返回包含文件的名称

因此,这些常量总是返回使用的文件路径。但是,我认为这不是您引用的代码片段中预期的行为。代码可能驻留在某个基类中,而它可以从扩展类调用。如果我们想获得当前类的路径,第一种方法是正确的。

@xdazz,您可以检查Symfony2的早期版本-他们有这样的代码吗?如果是,我打赌它只是复制粘贴到Symfony2。有没有任何例子表明DIR与对象类的目录不同?DIR总是给你当前目录而不是初始目录根据Sander,DIR返回调用它的脚本的目录。明天我仍然会运行一个快速测试来让我放心。考虑到你的评论是错误的,你错误地从我这里得到了nice free+1。但是如果代码不是类定义的一部分,他们怎么能使用“$this”?啊,是的。。。如果这段代码是在父类中扩展的,
\uuu DIR\uuu
将是父类的目录,
dirname($r->getFileName())
将是子类的目录。啊,我理解了。非常感谢。