下面我将为您详细讲解“ECSHOP在PHP5.5及高版本上报错的解决方法”的完整攻略。
问题描述
在PHP5.5及其高版本中,如果使用ECShop(版本2.x)进行开发或者二次开发,那么可能会出现以下报错信息:
Deprecated: Assigning the return value of new by reference is deprecated in file.php on line xx
或者:
Strict Standards: Non-static method tablename::funcname() should not be called statically in file.php on line xx
这是因为PHP5.5及其高版本对于几个报错级别做了更为严格的限制,而ECShop所使用的代码未能适应这种变动,以至于导致了上述错误的报出。
解决方法
针对这种情况,我们可以采用如下两个方法进行解决:
方法一:修改error_reporting级别
我们可以通过修改error_reporting级别的方式解决这个问题。我们只需要在index.php开头加上以下代码即可:
error_reporting(E_ALL ^ E_DEPRECATED ^ E_NOTICE);
这样就可以屏蔽掉"new"和“非静态方法调用”的报错信息。
方法二:修改代码文件
我们也可以直接修改代码文件中的报错代码来消除报错信息。具体地,我们需要将代码中的"=& new"和"$this->funcname()"修改为"= new"和"self::funcname()",例如:
//修改前
$obj =& new classname();
//修改后
$obj = new classname();
//修改前
$ret = $this->funcname();
//修改后
$ret = self::funcname();
例如,在includes/lib_transaction.php文件中,我们需要将以下代码:
$logistics_code = $obj_delivery->get_code();
$logistics_sn = &$obj_delivery->orderShipping($order);
修改为:
$logistics_code = $obj_delivery->get_code();
$logistics_sn = $obj_delivery->orderShipping($order);
这样,就可以消除相关的报错信息了。
示例说明
示例一:采用方法一解决问题
在index.php文件开头加入以下代码:
error_reporting(E_ALL ^ E_DEPRECATED ^ E_NOTICE);
这样就可以屏蔽掉“new”和“非静态方法调用”的报错信息。
示例二:采用方法二解决问题
我们在/includes/lib_transaction.php文件中发现以下代码:
$logistics_sn = &$obj_delivery->orderShipping($order);
将其修改为:
$logistics_sn = $obj_delivery->orderShipping($order);
就可以消除相关的报错信息了。
以上就是解决“ECSHOP在PHP5.5及高版本上报错的解决方法”的完整攻略。希望对您有所帮助!
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:ECSHOP在PHP5.5及高版本上报错的解决方法 - Python技术站