2

在 Web 项目中,有两个具有相同名称的类。直到现在这从来都不是问题,因为这两个类从未在同一时间/在同一个脚本中使用过。

现在我们需要在一个脚本中使用这两个类,因此我们得到了一个“无法重新声明类”的致命错误。

我的问题是:有什么选择可以解决这个问题?

一种可能的解决方案是重命名有问题的类之一,但这是我非常想避免的 - 其中一个类是第三方软件的一部分,不应在此级别修改,以保持可更新。

我知道有命名空间——它们是解决这个问题的有效选择吗?到目前为止,我从未使用过命名空间。

假设我们将其中一个类放入命名空间:这会解决问题吗?另外,我们需要采取什么措施来访问现在命名空间的类?

4

2 回答 2

1

命名空间肯定会解决您的问题。例如,我有多个名为“core”的类,但因为它们都是不同命名空间的类,所以根本不会产生任何冲突。

这确实意味着您必须检查所有代码并使用正确的路径引用命名空间类。

$item = new doubleClass();

会成为

$item = new \my_namespace\doubleClass();

还要确保您的其他脚本没有被命名空间,否则它将无法再找到非命名空间的类。

于 2013-11-01T16:09:35.567 回答
0

命名空间如何工作:考虑我们在文件结构中有两个名为 User 的类

/Package1/User.php

有内容

<?php
    namespace Package1;
    class user {...}

/Package2/User.php

有内容

<?php
    namespace Package2;
    class user {...}

现在由于某种原因,我们决定在 /Package3/UserManager.php 中的某个类 UserManager 中使用两者,内容为:

<?php
    namespace /Package3;
   use  package1/User as User1;
   use  package2/User as User2;
   class UserManager {
       public function __construct(User1 $user1, User2 $user2) {...}
       ...
   }
于 2013-11-01T16:13:50.947 回答