PHP报错The each() function is deprecated. This message will be suppressed on further calls

此文章发布于29个月前,部分信息可能已经过时,请自行斟酌确认

今天在使用支付宝sdk对接网页支付时,系统报了这个错误。

错误原因:

PHP7.2版本将each()方法移除了,项目中使用到each()地方就会报错!

支付宝支付SDK2.0中使用了each()方法。

错误截图:

each错误

解决办法1:

  • each()替换为foreach(),如下为示例:

each原写法为while (list ($key, $val) = each($para_temp)) { }
更改为:foreach ($para_temp as $key => $val) { }

示例代码:


     //while (list ($key, $val) = each($para_temp)) {   //旧写法已被废弃
     foreach ($para_temp as $key => $val) {    //替换方式
         if (false === $this->checkEmpty($val)) {
             //$val = $this->characet($val, $this->postCharset);
             $val = str_replace("'", "'", $val);
             //$val = str_replace("\"",""",$val);
             $sHtml .= "<input type='hidden' name='" . $key . "' value='" . $val . "'/>";
         }
     }


解决办法2:

  • 首先说明推荐第一种解决办法

办法2是自己修改each()方法代替:


function func_new_each(&$array){
    $res = array();
    $key = key($array);
    if($key !== null){
        next($array);
        $res[1] = $res['value'] = $array[$key];
        $res[0] = $res['key'] = $key;
    }else{
        $res = false;
    }
    return $res;
}

将上述方法放在公共文件中,然后将程序中将each修改为func_new_each即可。

ps:支付宝sdk中的需要替换的地方为alipay\AopClient.php中的375行,和412行。

最后修改:2020 年 12 月 26 日 06 : 35 PM
如果觉得我的文章对你有用,请随意赞赏

发表评论