我知道之前已经回答了这个问题,为什么会这样。但是,在我的情况下,问题只发生在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确实包含两次。是吗?
任何见解都表示赞赏。
答案 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)它。
因此,在您的情况下,它不会被多次包含,而如果您使用require
或include
则会被包含在内。
但是,您应该重新构建整个代码,以防止重新声明类。
class lol{}
if(!class_exists("lol")){
class lol{
function ll (){
return "ss";
}
}
}
echo lol::ll();
你无法访问^^,因为它仍然是重新声明。