__DIR__和dirname(__ FILE__)在PHP中是否有区别?


122

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

因为有许多使用的项目dirname(__FILE__)

Answers:


189

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


例如,以下两行:

var_dump(dirname(__FILE__));
var_dump(__DIR__);

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

string '/home/squale/developpement/tests/temp' (length=37)


但是,至少有两个区别:

  • __DIR__仅在PHP> = 5.3时存在
    • 这就是为什么dirname(__FILE__)使用更广泛的原因
  • __DIR__在编译时评估,而dirname(__FILE__)意味着函数调用并在执行时评估
    • 因此,__DIR__(或应该是)更快。


作为参考,请参见手册的“ 魔术常数”部分(引用)

__DIR__:文件目录。
如果在include中使用,则返回包含文件的目录。
等同于 dirname(__FILE__)
除非它是根目录,否则此目录名称不带斜杠。
(在PHP 5.3.0中添加。)


3
不确定,但是已经存在了一段时间(手册的Magic constants页面说它的行为已经在PHP 4.0.2中进行了修改;所以我想说它已经在那儿了)
Pascal MARTIN 2010年

3
DIR和dirname(FILE)总是删除最后一个斜杠,对吗?
nkkollaw

3
正确,除了整个路径为“ /”时,在这种情况下,它们不会剥离该路径。
Francisco Presencia 2014年

1
我不确定我是否正确理解:dirname(_FILE_是最快的,对吗?
Giacomo Tecya Pigani 2014年

7
@GiacomoTecyaPigani不,__DIR__更快。
Nico 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.