PHP マジック定数

PHP は、実行するすべてのスクリプトに、多くの定義済み定数を提供します。

ただし、多くの定数はさまざまな拡張ライブラリによって定義されており、これらの拡張ライブラリが読み込まれたときにのみ現れます(動的読み込み後、またはコンパイル時に組み込まれている場合)。

8つのマジック定数があり、その値はコード内の位置によって変わります。

たとえば __LINE__ の値は、スクリプト内の行位置に依存します。これらの特別な定数は大文字と小文字を区別しません。次のとおりです。


__LINE__

ファイル内の現在の行番号。

例

<?php echo 'これは第 "' . __LINE__ . '" 行'; ?>

上記の例の出力結果は次のとおりです。

这是第 “ 2 ” 行

__FILE__

ファイルの完全なパスとファイル名。インクルードされたファイル内で使用された場合は、インクルードされたファイル名を返します。

PHP 4.0.2 以降、__FILE__ は常に絶対パス(シンボリックリンクの場合は解決後の絶対パス)を含みますが、それ以前のバージョンでは相対パスを含むことがありました。

例:

例

<?php echo 'このファイルは "' . __FILE__ . ' " '; ?>

上記の例の出力結果は次のとおりです。

该文件位于 “ E:\wamp\www\test\index.php ”

__DIR__

ファイルが存在するディレクトリ。インクルードされたファイル内で使用された場合は、インクルードされたファイルが存在するディレクトリを返します。

これは dirname(__FILE__) と等価です。ルートディレクトリ以外では、ディレクトリ名の末尾にスラッシュは含まれません。(PHP 5.3.0 で追加)

例

<?php echo 'このファイルは "' . __DIR__ . ' " '; ?>

上記の例の出力結果は次のとおりです。

该文件位于 “ E:\wamp\www\test ”

__FUNCTION__

関数名(PHP 4.3.0 で追加)。PHP 5 以降、この定数は関数が定義されたときの名前(大文字小文字を区別)を返します。PHP 4 では、この値は常に小文字でした。

例

<?php function test() { echo '関数名は:' . __FUNCTION__ ; } test(); ?>

上記の例の出力結果は次のとおりです。

函数名为:test

__CLASS__

クラス名(PHP 4.3.0 で追加)。PHP 5 以降、この定数はクラスが定義されたときの名前(大文字小文字を区別)を返します。

PHP 4 では、この値は常に小文字でした。クラス名には、宣言されたスコープ(例: Foo\Bar)が含まれます。PHP 5.4 以降、__CLASS__ はトレイトでも機能します。トレイトのメソッド内で使用すると、__CLASS__ はそのトレイトのメソッドを呼び出しているクラスの名前になります。

例

<?php class test { function _print() { echo 'クラス名は:' . __CLASS__ . "<br>"; echo '関数名は:' . __FUNCTION__ ; } } $t = new test(); $t->_print(); ?>

上記の例の出力結果は次のとおりです。

类名为:test
函数名为:_print

__TRAIT__

Trait の名前(PHP 5.4.0 で追加)。PHP 5.4.0 以降、PHP は traits と呼ばれるコード再利用の方法を実装しました。

Trait 名には、宣言されたスコープ(例: Foo\Bar)が含まれます。

基本クラスから継承されたメンバーは、挿入された SayWorld トレイトの MyHelloWorld メソッドによって上書きされます。その動作は MyHelloWorld クラスで定義されたメソッドと同じです。優先順位は、現在のクラスのメソッドがトレイトのメソッドを上書きし、トレイトのメソッドが基本クラスのメソッドを上書きします。

例

<?php class Base { public function sayHello() { echo 'Hello '; } } trait SayWorld { public function sayHello() { parent::sayHello(); echo 'World!'; } } class MyHelloWorld extends Base { use SayWorld; } $o = new MyHelloWorld(); $o->sayHello(); ?>

上記の例の出力は次のとおりです。

Hello World!

__METHOD__

クラスのメソッド名(PHP 5.0.0 で追加)。このメソッドが定義されたときの名前(大文字小文字を区別)を返します。

例:

例

<?php function test() { echo '関数名は:' . __METHOD__ ; } test(); ?>

上記の例の出力結果は次のとおりです。

函数名为:test

__NAMESPACE__

現在の名前空間の名前(大文字小文字を区別)。この定数はコンパイル時に定義されます(PHP 5.3.0 で追加)。

例:

例

<?php namespace MyProject; echo '名前空間は:"', __NAMESPACE__, '"'; //出力 "MyProject" ?>

上記の例の出力結果は次のとおりです。

命名空间为:"MyProject"
その他の拡張