PHP中的__DIR__和dirname(__ FILE__)之间有什么区别吗?

use*_*729 112 php

对我来说看起来一样,但我不确定,

因为有很多项目使用dirname(__FILE__).

Pas*_*TIN 181

他们的结果完全一样 ; 所以,没有区别.


例如,以下两行:

var_dump(dirname(__FILE__));
var_dump(__DIR__);
Run Code Online (Sandbox Code Playgroud)

两者都会给出相同的输出:

string '/home/squale/developpement/tests/temp' (length=37)
Run Code Online (Sandbox Code Playgroud)


但是,至少存在两个不同之处:

  • __DIR__仅存在PHP> = 5.3
    • 这就是dirname(__FILE__)更广泛使用的原因
  • __DIR__在编译时进行评估,同时dirname(__FILE__)表示函数调用,并在执行时进行评估
    • 所以,__DIR__(或应该)更快.


作为参考,请参阅手册的Magic constants部分(引用):

__DIR__:文件的目录.
如果在include中使用,则返回包含文件的目录.
这相当于 dirname(__FILE__).
除非它是根目录,否则此目录名称没有尾部斜杠.
(在PHP 5.3.0中添加.)

  • 调用 `__DIR__` 100 万次:0.005666971206665 秒。调用 `dirname(__FILE__)` 100 万次:0.062714099884033 - 无论哪种方式,性能都不是问题,我个人更喜欢 `__DIR__` ,因为它的可读性和更简洁。 (7认同)
  • @GiacomoTecyaPigani不,`__DIR__`更快. (6认同)
  • __DIR__和dirname(__ FILE__)总是剥去最后一个斜线,对吗? (3认同)
  • 正确,除了整个路径为“ /”时,在这种情况下,它们不会剥离该路径。 (3认同)
  • 不确定,但它已经存在很长一段时间了*(手册的Magic常量页面说它的行为已经在PHP 4.0.2中被修改过了;所以我会说它之前已经存在过了)* (2认同)
  • 通过一个简单的基准测试,执行 100,000,000 次,我得到 dirname(__FILE__) 17 秒和 __DIR__ 4-3 秒,在 5 次测试中一致,所以看起来差异相当大(尽管除以 100,000,000)。 (2认同)