PHPでは__DIR__とdirname(__ FILE__)の間に違いはありますか?


122

見た目は同じですが、よくわかりません。

を使用する多くのプロジェクトがあるためdirname(__FILE__)です。

回答:


189

結果はまったく同じです。そのため、違いはありません。


たとえば、次の2行です。

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

両方とも同じ出力を提供します:

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


ただし、少なくとも2つの違いがあります。

  • __DIR__PHP> = 5.3でのみ存在します
    • これがdirname(__FILE__)より広く使用されている理由です
  • __DIR__ コンパイル時に評価されますが、 dirname(__FILE__)、関数呼び出し意味し、実行時に評価されます
    • そう、__DIR__です(または、あるべき)より速いです。


参考として、マニュアル(引用)のマジック定数」セクションを参照してください。

__DIR__:ファイルのディレクトリ。
インクルード内で使用すると、インクルードされたファイルのディレクトリが返されます。
これはと同等 dirname(__FILE__)です。
このディレクトリ名は、ルートディレクトリでない限り、末尾にスラッシュがありません。
(PHP 5.3.0で追加されました。)


3
確かではありませんが、かなり前から存在しています(マニュアルのMagic定数ページでは、その動作はPHP 4.0.2で変更されたと記載されています。そのため、以前にも存在していたと思います)
Pascal MARTIN

3
DIRとdirname(FILE)は常に最後のスラッシュを取り除きますよね?
nkkollaw 2013年

3
パス全体が "/"である場合を除いて正しいです。その場合、それらはそれを取り除きません。
フランシスコプレセンシア2014年

1
私が正しく理解したかどうかはわかりません:dirname(_FILE_が最速ですよね?
Giacomo Tecya Pigani 2014年

7
@GiacomoTecyaPiganiいいえ、__DIR__高速です。
ニコ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.