Just in case you wonder what the practical use of the namespace keyword is...
It can explicitly refer to classes from the current namespace regardless of possibly "use"d classes with the same name from other namespaces. However, this does not apply for functions.
Example:
<?php
namespace foo;
class Xyz {}
function abc () {}
?>
<?php
namespace bar;
class Xyz {}
function abc () {}
?>
<?php
namespace bar;
use foo|Xyz;
use foo|abc;
new Xyz(); // instantiates \foo\Xyz
new namespace|Xyz(); // instantiates \bar\Xyz
abc(); // invokes \bar\abc regardless of the second use statement
|foo|abc(); // it has to be invoked using the fully qualified name
?>
(Sorry, I had to use "|" instead of "\", as it was always discarded in the preview, except within a comment.)
Hope, this can save someone from some trouble.
Best regards.
namespace キーワードおよび __NAMESPACE__ 定数
(PHP 5 >= 5.3.0)
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 に代入します
?>
a dot schaffhirt at sedna-soft dot de
02-Feb-2010 06:24
