PEAR と Zend の疑似名前空間パターンを使用する場合、次のようなクラス階層に遭遇するのが一般的です。
Zend/
Db.php
Db/
Expr.php
DB.php には という名前のクラスがZend_Db
含まれ、Expr.php には という名前のクラスが含まれていZend_Db_Expr
ます。ただし、古い 5.2 疑似名前空間を PHP 5.3 の名前空間に変換しようとすると、名前空間とクラスが名前を共有するケースが表示されます。use 演算子は名前空間またはクラス名のいずれかをインポートできるため、あいまいさが生じます。
これは、私が変換に取り組んでいるアプリの例です。
App/
Core.php
Core/
Autoloader.php
ここで、ベース ディレクトリと名前空間は App. 名前空間の最上位にはCore
クラスがあります。
namespace App;
class Core { }
Core ディレクトリには、他のさまざまなコア クラスがあり、そのうちのいくつかは main を使用しCore
ます。疑似名前空間パターンでは、これは問題になりません。しかし、実際のネームスペース パターンでは、次のような状況が発生します。
namespace App\Core;
use App\Core as Core; // What is this importing? Namespace or class?
class Autoloader {
public function __construct(Core $core) {}
}
これは定義されていますか?ここに実際に輸入されたものは何ですか?