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