我已经创建了自己的 MVC 框架,它是 PSR-0 兼容的 atm。并使用 php-ActiveRecord 作为 ORM。我发现了一个问题,我从一个名为 的控制器(User
存在于命名空间TapMVC\Application
中)尝试调用一个 ActiveRecord 模型,它也被称为User
但存在于命名空间中,TapMVC\Db
如下所示:
namespace TapMVC\Application;
use TapMVC\Db;
class User extends Controller {
function index() {
print_r(Db\User::find('all'));
}
}
这给出了以下错误:
无法在第 12 行的 /path/to/project/app/Controllers/user.php 中重新声明类 TapMVC\Application\User
其中第 12 行是用户控制器的原型/声明。
为什么我不能这样做?我认为如果你的类在不同的命名空间中并且在实例化时有命名空间前缀,那么使用相同的名称就可以了吗?此外,看起来数据模型是在控制器之前通过自动加载声明的(因为它是触发错误的用户控制器声明),那么为什么当数据模型在命名空间TapMVC\Db
而不是TapMVC\Application
控制器在哪里时会发生冲突呢?
我可以看到,即使您定义了不同的名称空间,PHP 也会在与活动文件中的名称空间相同的名称空间下声明该对象,但我不确定。
希望有人可以提供帮助,所以我不需要像这样命名我的数据模型:(ProjectName-prefix)User
并编辑数据库表以获得用户模型和用户控制器。