PHP6の名前空間と同名のクラス
先日のPHP勉強会が終わって懇親会に移動するまでの間にakiyan.comの秋田さんから受けた質問です。
以下の内容は、2007/07/13にCVSからcheckoutしたソースからbuildしたphp6-devでの話です。正式リリースまでに仕様が変わる可能性があることに注意してください。
http://www.doyouphp.jp/php6/php6_namespace.shtmlにあるとおり、デフォルトの名前空間は「""」(空文字)になります。つまり、名前空間に属さないtestクラスを名前空間付きで扱う場合、
<?php $obj = new ::test();
となります。
また、
<?php namespace test; class test { } $obj = new test(); echo get_class($obj) . '<br>'; $obj = new ::test(); echo get_class($obj) . '<br>'; $obj = new test::test(); echo get_class($obj) . '<br>';
の実行結果は、
test::test test test::test
となります。1つ目はクラス定義と呼び出しが同じ名前空間なので、名前空間を省略したパターンです。2つ目と3つ目は明示的に名前空間(デフォルトの名前空間と名前空間のException)を指定した場合です。