PHP完全独学マニュアルlogin
PHP完全独学マニュアル
著者:php.cn  更新時間:2022-04-15 13:53:54

PHP マジック定数


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 では、この値は常に小文字です。クラス名には、それが宣言されているスコープが含まれます (例: FooBar)。 PHP 5.4 以降、__CLASS__ はトレイトに対しても機能することに注意してください。特性メソッド内で使用される場合、__CLASS__ は特性メソッドを呼び出すクラスの名前になります。

例:

<?php
class test {
function _print() {
echo '类名为:'  . __CLASS__ . "<br>";
echo  '函数名为:' . __FUNCTION__ ;
}
}
$t = new test();
$t->_print();
?>
上記の例の出力結果は次のようになります:
类名为:test
函数名为:_print

__TRAIT__

トレイト名 (PHP 5.4.0 の新機能)。 PHP 5.4.0 以降、PHP はトレイトと呼ばれるコード再利用の方法を実装しています。

トレイト名には、それが宣言されるスコープが含まれます (例: FooBar)。

基本クラスから継承されたメンバーは、挿入された 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"

PHP中国語ウェブサイト