PHP マジック変數(shù)
PHP マジック変數(shù)
PHP は、実行するスクリプトに多數(shù)の事前定義された定數(shù)を提供します。
ただし、多くの定數(shù)はさまざまな拡張ライブラリによって定義されており、これらの拡張ライブラリがロードされるとき、動(dòng)的ロード後、またはコンパイル中に組み込まれた場(chǎng)合にのみ表示されます。
コード內(nèi)の位置に応じて値が変化する魔法の定數(shù)が 8 つあります。
たとえば、__LINE__ の値は、スクリプト內(nèi)のどの行にあるかによって異なります。これらの特別な定數(shù)は大文字と小文字が區(qū)別されず、次のとおりです:
__LINE__
ファイル內(nèi)の現(xiàn)在の行番號(hào)。
例:
<?php echo '這是第 “ ' . __LINE__ . ' ” 行'; ?>
上記の例の出力結(jié)果は次のとおりです:
「2」行のフルパスとファイル名です
__FILE__
。インクルードされたファイル內(nèi)で使用された場(chǎng)合、インクルードされたファイルの名前を返します。
PHP 4.0.2 以降、__FILE__ には常に絶対パス (シンボリック リンクの場(chǎng)合は解決された絶対パス) が含まれますが、以前のバージョンには相対パスが含まれる場(chǎng)合がありました。
例:
<?php echo '該文件位于 “ ' . __FILE__ . ' ” '; ?>
上記の例の出力結(jié)果は次のとおりです:
ファイルは、「E:wampwwwtestindex.php」
__DIR__
ファイルが配置されているディレクトリにあります。インクルードされたファイル內(nèi)で使用された場(chǎng)合、インクルードされたファイルが配置されているディレクトリを返します。
dirname(__FILE__) と同等です。ルート ディレクトリでない限り、ディレクトリ名には末尾のスラッシュは含まれません。 (PHP 5.3.0 の新機(jī)能)
例:
<?php echo '該文件位于 “ ' . __DIR__ . ' ” '; ?>
上記の例の出力結(jié)果は次のとおりです:
ファイルは "E:wampwwwtest" にあります
__FUNCTION__
関數(shù)名 ( PHP 4.3.0 追加)。 PHP 5 以降、この定數(shù)は定義されたとおりの関數(shù)名を返します (大文字と小文字は區(qū)別されます)。 PHP 4 では、この値は常に小文字です。
例:
<?php function test() { echo '函數(shù)名為:' . __FUNCTION__ ; } test(); ?>
上記の例の出力結(jié)果は次のとおりです:
関數(shù)名: test
__CLASS__
クラスの名前 (PHP 4.3.0 で新しく追加されました)。 PHP 5 以降、この定數(shù)は定義されたときのクラスの名前を返します (大文字と小文字は區(qū)別されます)。
PHP 4 では、この値は常に小文字です。クラス名には、それが宣言されているスコープが含まれます (例: FooBar)。 PHP 5.4 以降、__CLASS__ はトレイトに対しても機(jī)能することに注意してください。特性メソッド內(nèi)で使用される場(chǎng)合、__CLASS__ は特性メソッドを呼び出すクラスの名前になります。
例:
<?php class test { function _print() { echo '類名為:' . __CLASS__ . "<br>"; echo '函數(shù)名為:' . __FUNCTION__ ; } } $t = new test(); $t->_print(); ?>
上記例の出力結(jié)果は以下の通りです:
クラス名: test
関數(shù)名: _print
__TRAIT__
トレイト名(PHP 5.4.0で新規(guī)追加) 。 PHP 5.4.0 以降、PHP はトレイトと呼ばれるコード再利用の方法を?qū)g裝しています。
トレイト名には、それが宣言されるスコープが含まれます (例: FooBar)。
基本クラスから継承されたメンバーは、挿入された SayWorld トレイトの MyHelloWorld メソッドによってオーバーライドされます。その動(dòng)作は、MyHelloWorld クラスで定義されたメソッドと一致しています。優(yōu)先順位としては、現(xiàn)在のクラスのメソッドが特性メソッドをオーバーライドし、特性メソッドが基本クラスのメソッドをオーバーライドします。
<?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 で新しく追加されました)。定義されたとおりのメソッド名を返します (大文字と小文字が區(qū)別されます)。
例:
<?php function test() { echo '函數(shù)名為:' . __METHOD__ ; } test(); ?>
上記の例の出力結(jié)果は次のとおりです:
関數(shù)名: test
__NAMESPACE__
現(xiàn)在の名前空間の名前 (大文字と小文字が區(qū)別されます)。この定數(shù)はコンパイル時(shí)に定義されます (PHP 5.3.0 の新機(jī)能)。
例:
<?php namespace MyProject; echo '命名空間為:"', __NAMESPACE__, '"'; // 輸出 "MyProject" ?>
上記の例の出力結(jié)果は次のとおりです:
名前空間は: "MyProject"