【问题标题】:how to avoid Cannot redeclare class for 2 diffrent classes with same name如何避免无法为具有相同名称的 2 个不同类重新声明类
【发布时间】:2011-04-21 17:46:37
【问题描述】:

我正在尝试将一些功能从 phpBB 板包含到我的应用程序中,例如单次登录。但是,如果我包含 common.php,它会显示“无法重新声明类用户”,因为我的应用程序已经有一个类用户。有没有办法避免这种情况?我尝试了一些命名空间,但我从未使用过它们。

所以我需要一种方法来包含 2 个具有相同名称的类。

【问题讨论】:

    标签: php class namespaces include


    【解决方案1】:

    Namespaces 是唯一的方法。

    【讨论】:

    • 你能把我推向正确的方向吗?如何使用这些命名空间来解决这个问题?
    • 您需要 PHP 5.3 来支持命名空间。通常,如果您使用它,您将不得不在代码中进行大量更改 - 必须在任何地方定义命名空间。将您的课程重命名为“myuser”会更容易
    • @Silver Light:您不必在任何地方都使用命名空间。您只需将一个用户类放在命名空间中,并在使用它的文件中更新对该类的引用。其余的你可以独自离开。也就是说,重命名类可能是这里更简单的解决方案。
    • 重命名我的类会很痛苦:-/因为我使用了很多动态调用,而我的 IDE 无法处理重构。我会继续寻找一段时间的解决方案。
    • @Bart van Heukelom,这就是我的意思,只是很难让我的想法清晰:)
    【解决方案2】:

    只需重命名您的班级。没什么大不了的

    【讨论】:

      【解决方案3】:

      正如该问题的其他答案中所提到的,如果不重命名您的类或经历让命名空间工作的大惊小怪(例如,确保您拥有正确的 PHP 版本),就无法解决这个问题。

      一个好的一般习惯是按习惯命名你的类名。例如,如果您查看 Zend 包,您会看到每个类名都以 Zend_ 为前缀,例如Zend_MailZend_MimeZend_Mime_Part。这意味着 (a) 具有相关功能的类之间存在逻辑关系,并且 (b) 类不太可能与您或其他框架创建的类发生冲突。其他项目也遵循这种模式,例如 PEAR。

      随着 PHP 5.3 的引入,此要求已过时。但是,5.3 还没有被广泛采用,尤其是共享主机提供商,这个解决方案很可能适合您当前的情况。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-27
        • 1970-01-01
        • 2016-12-25
        • 1970-01-01
        • 2020-03-30
        • 2017-01-22
        相关资源
        最近更新 更多