PHP マジック変数
PHP は、実行するスクリプトに多数の事前定義された定数を提供します。
ただし、多くの定数はさまざまな拡張ライブラリによって定義されており、これらの定数は、これらの拡張ライブラリがロードされるとき、動的ロード後、またはコンパイル中に組み込まれたときにのみ表示されます。
コード内の位置に応じて値が変化する魔法の定数が 8 つあります。
__LINE__ | ファイル内の現在の行番号。 |
__FILE__ | ファイルの完全なパスとファイル名。インクルードされたファイル内で使用された場合、インクルードされたファイルの名前を返します。 PHP 4.0.2 以降、__FILE__ には常に絶対パス (シンボリック リンクの場合は解決された絶対パス) が含まれますが、それより前のバージョンには相対パスが含まれる場合がありました。 |
__DIR__ | ファイルが配置されているディレクトリ。インクルードされたファイル内で使用された場合、インクルードされたファイルが配置されているディレクトリを返します。 dirname(__FILE__) と同等です。ルート ディレクトリでない限り、ディレクトリ名には末尾のスラッシュは含まれません。 (PHP 5.3.0 の新機能) |
__FUNCTION__ | 関数名 (PHP 4.3.0 の新機能)。 PHP 5 以降、この定数は定義されたとおりの関数名を返します (大文字と小文字は区別されます)。 PHP 4 では、この値は常に小文字です。 |
__CLASS__ | クラスの名前 (PHP 4.3.0 で新しく追加されました)。 PHP 5 以降、この定数は定義されたときのクラスの名前を返します (大文字と小文字が区別されます) |
__TRAIT__ | トレイト名 (PHP 5.4.0 の新機能)。 PHP 5.4.0 以降、PHP はトレイトと呼ばれるコード再利用の方法を実装しています。 |
__METHOD__ | クラスのメソッド名 (PHP 5.0.0 で新しく追加されました)。定義されたとおりのメソッド名を返します (大文字と小文字が区別されます)。 |
__NAMESPACE__ | 現在のネームスペースの名前 (大文字と小文字が区別されます)。この定数はコンパイル時に定義されます (PHP 5.3.0 の新機能)。 |
ファイルの現在の行番号を一つずつ説明していきます。インスタンス フルパスとファイル名。インクルードされたファイル内で使用された場合、インクルードされたファイルの名前を返します。
PHP 4.0.2 以降、__FILE__ には常に絶対パス (シンボリック リンクの場合は解決された絶対パス) が含まれますが、以前のバージョンには
相対パスが含まれる場合がありました。
インスタンス<?php
header("Content-type:text/html;charset=utf-8"); //设置编码
echo '这是第 “ ' . __LINE__ . ' ” 行';
?>
プログラム実行結果:
「D:WWW11.php」のファイルが置かれているディレクトリにファイルが配置されます
__DIR__
。インクルードされたファイル内で使用された場合、インクルードされたファイルが配置されているディレクトリを返します。
dirname(__FILE__) と同等です。ルート ディレクトリでない限り、ディレクトリ名には末尾のスラッシュは含まれません。 (PHP 5.3.0の新機能)
インスタンス<?php header("Content-type:text/html;charset=utf-8"); //设置编码 echo '该文件位于 “ ' . __FILE__ . ' ” '; ?>プログラムの実行結果:
ファイルは「D:WWW」にあります
__FUNCTION__
関数名 (PHP 4.3.0 の新機能)。 PHP 5 以降、この定数は定義されたとおりの関数名を返します (大文字と小文字は区別されます)。 PHP 4 では、この値は常に小文字です。
インスタンス
<?php header("Content-type:text/html;charset=utf-8"); //设置编码 echo '该文件位于 “ ' . __DIR__ . ' ” '; ?>
プログラム実行結果:関数名:funtext
__CLASS__
クラスの名前 (PHP 4.3.0 の新機能)。 PHP 5 以降、この定数は定義されたときのクラスの名前を返します (大文字と小文字は区別されます)。
PHP 4 では、この値は常に小文字です。クラス名には、それが宣言されているスコープが含まれます (例: FooBar)。 PHP 5.4 以降、__CLASS__ はトレイトに対しても機能することに注意してください。特性メソッド内で使用される場合、__CLASS__ は特性メソッドを呼び出すクラスの名前になります。
インスタンス
<?php header("Content-type:text/html;charset=utf-8"); //设置编码 function funtext() { echo '函数名为:' . __FUNCTION__ ; } funtext(); ?>
プログラム実行結果:
クラス名:classtest関数名:fun
__TRAIT__トレイト名(PHP 5.4の新機能) .0)。 PHP 5.4.0 以降、PHP はトレイトと呼ばれるコード再利用の方法を実装しています。 トレイト名には、それが宣言されるスコープが含まれます (例: FooBar)。 基本クラスから継承されたメンバーは、挿入された SayWorld トレイトの MyHelloWorld メソッドによってオーバーライドされます。その動作は、MyHelloWorld クラスで定義されたメソッドと一致しています。優先順位としては、現在のクラスのメソッドが特性メソッドをオーバーライドし、特性メソッドが基本クラスのメソッドをオーバーライドします。
インスタンス
<?php header("Content-type:text/html;charset=utf-8"); //设置编码 class classtest { function fun() { echo '类名为:' . __CLASS__ . "<br>"; echo '函数名为:' . __FUNCTION__ ; } } $t = new classtest(); $t->fun(); ?>
プログラムの実行結果:
Hello World!
__METHOD__
クラスのメソッド名 (PHP 5.0 で新しく追加されました。 0)。定義されたとおりのメソッド名を返します (大文字と小文字が区別されます)。
<?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(); ?>
プログラムの実行結果:
関数名: test
__NAMESPACE__
現在の名前空間の名前 (大文字と小文字が区別されます)。この定数はコンパイル時に定義されます (PHP 5.3.0 の新機能)。<?php header("Content-type:text/html;charset=utf-8"); //设置编码 function test() { echo '函数名为:' . __METHOD__ ; } test(); ?>プログラム実行結果:
名前空間は「MyProject」です