我知道这个问题以前已经回答过了,为什么会造成这种情况。然而,在我的情况下,这个问题只发生在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)它。
所以在你的情况下,它不会被包含多次,而如果你使用require
或include
,它会被包含多次。
然而,你应该重构你的整个代码,以防止类的重声明。
class lol{}
if(!class_exists("lol")){
class lol{
function ll (){
return "ss";
}
}
}
echo lol::ll();
你不能访问^^,因为它仍然是一个重声明。