Stories

Detail Return Return

記錄一次yii2項目php版本升級到7.4的代碼變更 - Stories Detail

目前開發用的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];} //正確
user avatar vanve Avatar laoduan Avatar wujingquan Avatar skyselang Avatar daqianduan Avatar yian Avatar wnhyang Avatar invalidnull Avatar java_study Avatar lyflexi Avatar yanwushu Avatar me_life Avatar
Favorites 57 users favorite the story!
Favorites

Add a new Comments

Some HTML is okay.