目前开发用的yii2基于php7.1.33构建,鉴于7.1已经停止维护,计划更新php版本到7.4,并且将yii2的版本从2.0.15.1升级到最新的2.0.43。
此文记录一下修改步骤

object修改

错误提示:

PHP Compile Error
Cannot use yii\base\Object as Object because 'Object' is a special class name

错误原因:

php7.2开始不支持使用object作为类名,需要将所有使用\yii\base\Object的方法修改为使用\yii\base\BaseObject

controller修改

错误提示:

Yii2 Call to a member function validateCsrfToken() on string

错误原因:

自yii2.0.36开始,
yii2加入了一个类变量 $request,在init函数中初始化,如果重写controller的init方法,必须执行 parent::init()。

花括号修改

错误提示:

PHP Deprecated Warning
Array and string offset access syntax with curly braces is deprecated

错误原因:

使用大括号访问数组及字符串索引的方式在php7.4中已被废弃。请使用 $var[$idx] 的语法来替代 $var{$idx}。
例:php 7.4 不再允许使用花括号来访问数组的元素。

$arr = array('1','2','3'); //定义一个数组:
echo $arr[0]; //正确
echo $arr{0}; //7.4以前正确,7.4错误

数组非空修改

错误提示:

Notice: Trying to access array offset on value of type null 

错误原因:

php7.4不支持以数组形式访问非数组
尝试以数组方式访问 null,bool, int,float 或 resource (例如 $null["key"])将会抛出 notice 通知。
在访问一个可能为空的数组时要先判断数组非空

$arr = array(); //定义一个数组:
if($arr[0]){echo $arr[0];} //7.4以前正确,7.4提示
if(!empty($arr)&&$arr[0]){echo $arr[0];} //正确

buildyuan
95 声望6 粉丝

talk is cheap,show me the code