致命错误:无法重新声明数据库类


Fatal error: Cannot redeclare class DbBase

我知道这个问题以前已经回答过了,为什么会造成这种情况。然而,在我的情况下,这个问题只发生在MacOS Lion(10.7)上,这是在php 5.3.6。相同的代码库在我的windows 7机器上运行,这是php 5.3.8。

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

class DbBase
{
   ...
}

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

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

我有这样的场景:

File DBBase.php:

defines Class DBBase

File A_DB.php:

require_once("DBBase.php")

文件B_DB.php:

require_once("DBBase.php")

File foo.php:

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

所以DBBase.php文件被包含了两次。不是吗?

任何见解都是赞赏的。

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

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

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(); 

你不能访问^^,因为它仍然是一个重声明。