目前開發用的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];} //正確