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

Lui*_*nas 7 php

这个错误在PHP 5.4.3中引发,我发现的解决方案是隐藏错误.

error_reporting(E_ALL ^ E_STRICT);
Run Code Online (Sandbox Code Playgroud)

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

这是错误:

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

这是该类的代码:

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
Run Code Online (Sandbox Code Playgroud)

Mar*_*c B 10

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

所以你有了

class foo {
   function foo() { ... this is a constructor }
   function __construct() { .. this is another constructor ... }
}
Run Code Online (Sandbox Code Playgroud)

重命名您的VisanaObject方法,或将其代码移入__construct().