本地PHP环境PHP5.5,运行以前的老项目,很多地方会报如下的错
Redefining already defined constructor for class XXX
检查代码可以发现,对应的位置是某个类的构造函数,具体写法如下:
/** 主类库代码 */ class PSCWS4 { var $_xd; // xdb dict handler var $_rs; // ruleset resource var $_rd; // ruleset data var $_cs = ''; // charset var $_ztab; // zi len table var $_mode = 0; // scws mode var $_txt; // text string var $_res; var $_zis; // z if used?(duality) var $_off = 0; var $_len = 0; var $_wend = 0; var $_wmap; var $_zmap; // 构造函数 function PSCWS4($charset = 'utf8') { $this->_xd = false; $this->_rs = $this->_rd = array(); $this->set_charset($charset); } // FOR PHP5 function __construct() { $this->PSCWS4(); } function __destruct() { $this->close(); }
其中使用和类名相同点函数名作为构造函数是php4时代的写法,php5时代的构造函数是 __construct(),由于程序比较老,所以采用了上面的写法。
但是从php5.4开始,对于这样的两种写法同时出现的情况,要求必须__construct()在前,同名函数在后,所以只需要对调两个函数的位置即可。
修改后的写法应该为:
/** 主类库代码 */ class PSCWS4 { var $_xd; // xdb dict handler var $_rs; // ruleset resource var $_rd; // ruleset data var $_cs = ''; // charset var $_ztab; // zi len table var $_mode = 0; // scws mode var $_txt; // text string var $_res; var $_zis; // z if used?(duality) var $_off = 0; var $_len = 0; var $_wend = 0; var $_wmap; var $_zmap; // FOR PHP5 function __construct() { $this->PSCWS4(); } function __destruct() { $this->close(); } // 构造函数 function PSCWS4($charset = 'utf8') { $this->_xd = false; $this->_rs = $this->_rd = array(); $this->set_charset($charset); }
转载请注明:苏demo的别样人生 » php5.2.17 升级到5.5之后提示 Strict standards: Redefining already defined constructor for class PSCWS 错误解决办法