升级之后需要注意事情

PHP升级7.2之后需要注意的事情

服务器技术 2020-06-18 12:39:57 27

导读

今天遇到个错误,本地环境可以正常运行,拿到测试服务器就运行不了,仔细查阅了下文档,是由于PHP版本不同导致的,就是count(null)。本地版本:7.1.16 服务器版本:7.2.6总结几条PHP升级7.2之后需要注意的事情:each函数已经被废弃之前版本写法: <?php ……

今天遇到个错误,本地环境可以正常运行,拿到测试服务器就运行不了,仔细查阅了下文档,是由于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: $newfunc\n"; 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";


1253067 TFnetwork_cn