如何修复严格标准:重新定义已定义的类构造函数

时间:2016-07-20 18:50:03

标签: php

PHP 5.4.3中引发了此错误,我找到的解决方案是隐藏错误。

error_reporting(E_ALL ^ E_STRICT);

但我想解决它,而不是隐藏它。你能解释为什么抛出这个错误以及如何修复它吗?

这是错误:

  

严格标准:重新定义已定义的VisanaObject类的构造函数   第33行/home/template/public_HTML/project/activecollab/angie/classes/VisanaObject.class.php

这是该类的代码:

class VisanaObject {

    /**
    * Object constructor
    *
    * @param void
    * @return Object
    */
    function VisanaObject() {
      $args = func_get_args();

      // Call constructor, with or without args
      if(is_array($args)) {
        call_user_func_array(array(&$this, '__construct'), $args);
      } else {
        $this->__construct();
      } // if
    } // VisanaObject

    /**
    * Construct the VisanaObject
    *
    * @param void
    * @return VisanaObject
    */
    function __construct() {

    } // __construct

  } // VisanaObject

1 个答案:

答案 0 :(得分:8)

这是一个PHP回归。 PHP使用类名作为构造函数方法,并且没有正式的__construct()魔术方法。现在有__construct,但是“class name as function = constructor”是为了向后兼容而保留的。

所以你有

class foo {
   function foo() { ... this is a constructor }
   function __construct() { .. this is another constructor ... }
}

重命名VisanaObject方法,或将其代码移至__construct()