__DIR__ VS使用Reflection

时间:2011-06-08 07:21:25

标签: php symfony

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

    if (null === $this->rootDir) {
        $r = new \ReflectionObject($this);
        $this->rootDir = dirname($r->getFileName());
    }

为什么不使用__DIR__

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

他们之间有什么区别?

4 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:2)

正如PHP手册所述:

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

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

答案 2 :(得分:0)

__DIR__仅存在于PHP 5.3中。在5.3之前,我们必须使用dirname(__FILE__)或类似的东西。

答案 3 :(得分:0)

我认为这是因为__DIR__将返回最初调用的脚本目录。在代码示例中,您将获得对象类的目录。我可能错了,虽然没有尝试过,但如果我是的话,请纠正我。