Do You PHP はてブロ

Do You PHPはてなからはてブロに移動しました

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)を指定した場合です。