当使用 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) {}
}
这是定义的吗?这里实际导入的是什么?