PHP:重构双重使用的类名有哪些选项?

时间:2013-11-01 16:01:06

标签: php namespaces

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

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

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

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

我知道有命名空间 - 它们是否是这个问题的有效选择?到目前为止,我从未使用名称空间。

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

2 个答案:

答案 0 :(得分:1)

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

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

$item = new doubleClass();

会变成

$item = new \my_namespace\doubleClass();

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

答案 1 :(得分:0)

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

/Package1/User.php

内容

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

/Package2/User.php

内容

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

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

<?php
    namespace /Package3;
   use  package1/User as User1;
   use  package2/User as User2;
   class UserManager {
       public function __construct(User1 $user1, User2 $user2) {...}
       ...
   }