致命错误:无法重新声明DbBase类

时间:2011-11-22 07:38:52

标签: php macos

我知道之前已经回答了这个问题,为什么会这样。但是,在我的情况下,问题只发生在PHP 5.3.6上的MacOS Lion(10.7)上。在我的Windows 7机器上运行相同的代码库,该机器在php 5.3.8上。

我到处都使用过require_once。似乎导致问题的代码片段是:

class DbBase
{
   ...
}

在多个文件中包含的文件中。但是,如果我将类声明包装在:

中,则错误消失
if (class_exists('DbBase') != true)
{
    class DbBase
    {
        ...
    }
} 

我有这种情况:

文件DBBase.php:

defines Class DBBase

文件A_DB.php:

require_once("DBBase.php")

文件B_DB.php:

require_once("DBBase.php")

文件foo.php:

require_once("A_DB.php")
require_once("B_DB.php)

因此文件DBBase.php确实包含两次。是吗?

任何见解都表示赞赏。

2 个答案:

答案 0 :(得分:3)

我遇到了同样的错误。但是,它与“多次声明一个单独的课程”无关。这是因为我已经像这样备份了这个类: class.shipping.php class.shipping_092512_bk.php 然后,我将备份文件上传到服务器。这导致应用程序因两个类而失败。因此,我将备份重命名为没有.php文件扩展名'class.shipping_092512.bk'的其他内容。问题解决了。

答案 1 :(得分:1)

当您多次声明单个类而不是一次时,会发生此错误;下面的代码会抛出该错误。

class phpp{}
class phpp{}

5.3.6和5.3.8的行为不太可能不同,因为类和对象没有任何重大变化。

您应该检查requiring once文件中的重复代码。 。

编辑:

require_once()语句与require()相同,但PHP将检查文件是否已被包含,如果已包含,则不再包括(require)它。

因此,在您的情况下,它不会被多次包含,而如果您使用requireinclude则会被包含在内。

但是,您应该重新构建整个代码,以防止重新声明类。

class lol{}
if(!class_exists("lol")){
    class lol{
        function ll (){
            return "ss";
        }
    }
}

echo lol::ll(); 

你无法访问^^,因为它仍然是重新声明。