PHP致命错误:无法重新声明功能

时间:2011-03-17 01:37:33

标签: php apache

我在文件B.inc

中有一个函数A.
line 2:  function A() {

           ...

line 10: }

在apache日志中:

PHP致命错误:无法在第10行的B中重新声明A()(之前在B.inc:2中声明)

6 个答案:

答案 0 :(得分:18)

我想你在多个部分使用require "B.inc"?您可以尝试在所有这些实例中使用require_once吗?

好像你的B.inc被解析了两次。

答案 1 :(得分:4)

我遇到了类似的问题,其中一个完全包含在一个类中的公共函数中的函数被报告为已重新声明。我把问题减少到了

class B {
  function __construct() {
   function A() {
   }
  }
 }
 $b1 = new B();
 $b2 = new B();

致命错误:尝试创建$ b2时无法重新声明A()。

代码的原作者已经使用if(!class_exists('B'))保护类声明不被重新声明,但如果我们尝试创建多个,则不保护内部函数A()不被重新声明班级的实例。

注意:这可能与上述问题不同但是它与PHP Fatal error: Cannot redeclare class

中的一些答案非常相似

答案 2 :(得分:3)

您是否已在其他地方声明了A()?

或者,你是否在事故中两次打电话给B.inc?

尝试使用:require_once(“B.inc”);

答案 3 :(得分:0)

听起来你可能不止一次地包括B.inc。

// Rather than
include("B.inc");

// Do:
require_once("B.inc");

require_once()允许您在必要时调用文件,但只有在尚未解析时才实际解析。

答案 4 :(得分:0)

确保你require_once ( 'B.inc' )或`include_once('B.inc')'

答案 5 :(得分:0)

这些人都没问题,而是使用php5,autoload,而不是函数静态方法。与对象相关的方法大多数更好,但使用静态方法可以在许多类中重用方法名称。 你可以调用这样的静态方法

ClassName::myFunction();