PHPの__FILE__とか__DIR__とかのマジック定数まとめ

PHPではマジック定数を使うことでソースファイルについてのメタ情報を調べることができます。

メタ情報というのは例えばファイル名・ディレクトリ名とか関数名とかクラス名のこと

例えば __FILE__  とか __DIR__  とかは有名ですが、実はマジック定数は8つも定義されてます。

ということでそのマジック定数の意味やコード例をまとめて紹介

PHPのマジック定数一覧

現在PHPで使える__XXX__形式のマジック定数は次の8種類

  • __FILE__
  • __DIR__
  • __LINE__
  • __FUNCTION__
  • __METHOD__
  • __CLASS__
  • __TRAIT_
  • __NAMESPACE__

これらについて順に使い方とかを紹介していきます。

__FILE__

この定数が呼び出されたファイルのフルパス+ファイル名を返す。

インクルードされたファイル内で呼び出した場合、呼び出し元でなくそのファイルのフルパス

 

次は hoge.php というファイルで __FILE__  を表示しているコード例

このコードのように C:/xampp/htdocs/hoge.php  みたいなフルパスを返してきます。

 

ちなみに次はインクルードしたファイルで __FILE__  を表示する例

例 : hoge.phpでpiyo.phpをインクルードし、piyo.phpで __FILE__  を表示する

この例のようにインクルードされたファイル内では呼び出し元ではなく、自分自身のPHPファイルのフルパスを返すことに注意

__DIR__

この定数が呼び出されたファイルがあるディレクトリのフルパスを返す

ディレクトリパスの最後に区切り文字(スラッシュなど)はつかない

 

次は hoge.php というファイル内で自身のファイルがあるディレクトリ名を表示するコード例

上のコード例のように C:/xampp/htdocs  などのルートディレクトリからのフルパスが表示されます。

ただし __FILE__  と同じくインクルードされたファイルから呼び出した場合、そのファイルがあるディレクトリのフルパスになる点に注意です。

__LINE__

この定数が呼び出されたソースファイル上の現在の番号を返す

例えば次がソースコード内で行番号を表示するコード例

__LINE__  は1から始まる行番号を数字として返すだけです。

print_r  でのデバッグ時に __FILE__  と一緒に使うとファイル名と行番号を表示できて便利です。

__FUNCTION__

この定数が呼び出された場所にある純粋な関数名を返す。

もしなければ空の文字列

 

例えば次はグローバル関数とクラス内関数のそれぞれで __FUNCTION__  を表示しているコード

上のコード例だとどちらも hoge_func  と表示されます。

グローバル関数でもクラス内関数でも純粋な関数名だけを返すのが特徴です。

次に紹介する __METHOD__  と違い、クラス名などは一切付きません。

__METHOD__

この定数が呼び出された場所にある関数の名前を返す

__FUNCTION__  と違うのはクラス名などを含む厳密な名前であること

 

例えば次がグローバル関数とクラス内関数を __METHOD__  で表示しているコード

グローバルな関数の場合は普通に hoge_func  と関数名だけが返ってきます。

しかしクラス内関数だと Hoge::hoge_func  のようにクラス名がつくのが __FUNCTION__  との違いですね。

ちなみに名前空間内にある場合はその名前空間名も付与されて表示されます。

__CLASS__

この定数が呼び出された場所にあるクラス名を返す。

もしクラス内でなければ空の文字列

 

次はHogeクラス内の関数で __CLASS__  を表示しているコード例

上のコードだと Hoge  と表示されます。

__TRAIT__

この定数が呼び出された場所にあるトレイトの名前を表示する。

もしトレイト内でないならば空の文字列

ちなみにトレイトは関数をまとめるためのもので、他言語のインターフェースみたいなもの

 

例えば次はAnyFuncトレイト内の関数で __TRAIT__  を表示しているコード

上のコードだと AnyFunc  が表示されます。

 

ちなみにトレイトの使用方法などついては次のPHPマニュアルを参照

PHP5.4.0以降から使えるようになった機能です。

__NAMESPACE__

この定数が呼び出された場所での名前空間の名前を返す

もし名前空間内でないなら空の文字列

 

例えば次が Foo\Bar という名前空間で __NAMESPACE__  を表示しているコード例

上のコードだと Foo\Bar  と名前空間がそのまま表示されます。

 

ちなみに名前空間の詳しい解説については次のPHPマニュアルを参照

名前空間はPHPバージョン5.3.0以降で使用可能です。

ここまでのまとめ

それぞれのマジック定数が返す値についてもう一度まとめると次の通り

  • __FILE__
    この定数を呼び出したファイルのフルパス
  • __DIR__
    この定数が呼び出したファイルのあるディレクトリのフルパス
  • __LINE__
    この定数を呼び出した地点でのファイルの行番号
  • __FUNCTION__
    関数内でこの定数を呼び出した場合、その関数の純粋な名前
  • __METHOD__
    関数内でこの定数が呼び出した場合、クラス名などを含む関数の厳密な名前
  • __CLASS__
    クラス内でこの定数を呼び出した場合、そのクラス名
  • __TRAIT__
    トレイト内でこの定数を呼び出した場合、そのトレイト名
  • __NAMESPACE__
    名前空間内でこの定数を呼び出した場合、その名前空間の名前

改めてまとめてみると色んなマジック定数があることが分かりますね。

デバッグ時とか動的に関数やクラスを生成する場合とかに便利そうです。

 

以上PHPで定義済みのマジック定数についてまとめてみました。

ではでは・△・)ノ バイバイ