namespace キーワードおよび __NAMESPACE__ 定数
(PHP 5 >= 5.3.0, PHP 7, PHP 8)
PHP には、現在の名前空間内の要素へのアクセスを抽象化するための方法が 2 通りあります。
マジック定数 __NAMESPACE__
および namespace
キーワードがそれです。
__NAMESPACE__
の値は文字列で、現在の名前空間の名前が格納されます。
名前空間に属さないグローバルなコードでは、この中身は空文字列となります。
例1 名前空間内のコードでの __NAMESPACE__ の例
<?phpnamespace MyProject;echo '"', __NAMESPACE__, '"'; // "MyProject" と出力します?>
例2 グローバルなコードでの __NAMESPACE__ の例
<?phpecho '"', __NAMESPACE__, '"'; // "" と出力します?>
__NAMESPACE__
定数は、動的に名前を作成する場合に便利です。
たとえば次のようになります。
例3 __NAMESPACE__ による動的な名前の作成
<?phpnamespace MyProject;function get($classname){ $a = __NAMESPACE__ . '\\' . $classname; return new $a;}?>
namespace
キーワードを使用すると、
現在の名前空間あるいはサブ名前空間内の要素を明示的に指定することができます。
これは、クラスにおける self
演算子と同じ意味合いのものです。
例4 名前空間内での namespace 演算子
<?phpnamespace MyProject;use blah\blah as mine; // "名前空間の使用法: エイリアス/インポート" を参照くださいblah\mine(); // MyProject\blah\mine() 関数をコールしますnamespace\blah\mine(); // MyProject\blah\mine() 関数をコールしますnamespace\func(); // MyProject\func() 関数をコールしますnamespace\sub\func(); // MyProject\sub\func() 関数をコールしますnamespace\cname::method(); // MyProject\cname クラスの静的メソッド "method" をコールします$a = new namespace\sub\cname(); // MyProject\sub\cname クラスのオブジェクトのインスタンスを作成します$b = namespace\CONSTANT; // 定数 MyProject\CONSTANT の値を $b に代入します?>
例5 グローバルコードでの namespace 演算子
<?phpnamespace\func(); // func() 関数をコールしますnamespace\sub\func(); // sub\func() 関数をコールしますnamespace\cname::method(); // cname クラスの静的メソッド "method" をコールします$a = new namespace\sub\cname(); // sub\cname クラスのオブジェクトのインスタンスを作成します$b = namespace\CONSTANT; // 定数 CONSTANT の値を $b に代入します?>