在具有相同供应商名称的同一项目的不同捆绑中定义第二个控制器类PostController后,我开始收到以下错误。
致命错误:无法重新声明课程 Amce \ Bundle \ CrudzBundle \ Controller \ PostController in C:\ XAMPP \ htdocs中\社区的\ src \ AMCE \ CrudzBundle \控制器\ PostController.php 在第350行
我理解这个错误意味着我有两个类(OOP)的相同名称。但是,为什么即使我有不同供应商部分的不同捆绑,我仍然有这个错误?这是否意味着Synfony2在所有情况下都不允许使用两个具有相同名称的控制器类?
您的专家解释总是受到赞赏。
答案 0 :(得分:3)
我假设罪魁祸首类的名称空间是:
namespace Amce\Bundle\CrudzBundle\Controller
但是文件路径是:
C:\xampp\htdocs\community\src\Amce\CrudzBundle\Controller\PostController.php
如果复制/粘贴原始类,则可能忘记更改命名空间。
自动加载器会检查此目录中是否存在不存在的类(因为所述命名空间),但在此之前,它将先发现完全相同的命名空间/类。
在PHP 5.3中,命名空间被合并到类名中。重要的是要记住它们之间没有区别,因为它们在编译时被组合在一起。
尽管您可以调用__NAMESPACE__
来获取当前命名空间,但实际上这是不执行代码的动态内省,而是将魔术常量转换为常量编译时的字符串。
类也是如此,命名空间成为类名的一部分,而 是类在内部引用表中的索引方式。
请注意命名空间。