繁体   English   中英

__DIR__ VS 使用反射

[英]__DIR__ VS using Reflection

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

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

为什么不直接使用__DIR__

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

它们之间有什么区别?

__DIR__返回调用它的文件的目录。 Symphony2 代码返回定义 class 的目录,这很可能是一个不同的文件。

正如 PHP 手册所述:

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM