今天遇到个错误,本地环境可以正常运行,拿到测试服务器就运行不了,仔细查阅了下文档,是由于PHP版本不同导致的,就是count(null)。
本地版本:7.1.16 服务器版本:7.2.6
总结几条PHP升级7.2之后需要注意的事情:
each函数已经被废弃
之前版本写法:
<?php $array = array(); each($array); // Deprecated: The each() function is deprecated. This message will be suppressed on further calls
在7.2版本中会提示过时,可以使用foreach替代each方法,也可以自己修改each方法替代:
<?php function funcNewEach(&$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; }
当传递一个无效参数时,count()函数将抛出warning警告:
<?php count(''); // Warning: count(): Parameter must be an array or an object that implements Countable
在7.2版本中将严格执行类型区分,参数类型不正确,将会出现警告,所以需要在使用count方法时注意参数的值,不过也可以通过自己修改方法来替代(不建议):
<?php function funcNewCount($array_or_countable, $mode = COUNT_NORMAL) { if (is_array($array_or_countable) || is_object($array_or_countable)) { return count($array_or_countable, $mode); } else { return 0; } }
create_function被废弃,可以用匿名函数来代替:
之前版本写法:
<?php $newfunc = create_function('$a,$b', 'return "ln($a) + ln($b) = " . log($a * $b);'); echo "New anonymous function: $newfuncn"; echo $newfunc(2, M_E) . "n"; // outputs // New anonymous function: lambda_1 // ln(2) + ln(2.718281828459) = 1.6931471805599 // Warning This function has been DEPRECATED as of PHP 7.2.0. Relying on this function is highly discouraged.
在7.2版本中会有警告提示,可修改为匿名函数来替代
<?php $newfunc = function ($a,$b){ return "ln($a) + ln($b) = " . log($a * $b); }; echo $newfunc(2, M_E) . "n";