IT女子のお気に入りフォルダ

管理人の備忘録と実践を兼ねた(出来るだけ)役に立つ情報を配信するブログです。

dirname(__FILE__) か__DIR__ か

絶対パスの取得にdirname(__FILE__)__DIR__が使われていますが、この二つはどう違うのでしょうか?
どちらを使えばいいのか迷ったので調べてみました。

__FILE____DIR__もPHPのマジカル定数です。

__FILE__
ファイルのフルパスとファイル名(シンボリックリンクを解決した後のもの)。インクルードされるファイルの中で使用された場合、インクルードされるファイルの名前が返されます。

__DIR__
そのファイルの存在するディレクトリ。includeの中で使用すると、インクルードされるファイルの存在するディレクトリを返します。つまり、これはdirname(__FILE__)と同じ意味です。ルートディレクトリである場合を除き、ディレクトリ名の末尾にスラッシュはつきません。

参考 PHPマニュアル:自動的に定義される定数

というわけで、dirname(__FILE__)__DIR__は同じ結果になります。
違いは何だというと__DIR__はPHP5.3から追加されました。
そのため古いPHPを使わざるを得ない環境にはdirname(__FILE__)が残りますが、PHP5.3以降が使用できる環境であれば、__DIR__を使えばいいと思います。

require_once( __DIR__ . '/config.php');