PHP5升級PHP7的注意事項

最近給公司做PHP5.6到7.4的升級,服務(wù)器部分運維做了,我負責代碼的部分,下面分享一下可能遇到的問題,也算是個總結(jié)了吧

先吹一波PHP7.4 新語法借鑒了ES6的挺多特性,PHP一直在進步??!

下面先說幾個重要的,會產(chǎn)生error錯誤的

  1. 調(diào)用函數(shù)缺少必要參數(shù)的錯誤級別從warning提升到error
  2. 使用移除的函數(shù)
    簡單列舉幾個:

call_user_method()call_user_method_array()
所有 ereg 系列函數(shù)
mcrypt_generic_end()
所有 ext/mysql 函數(shù)和所有 ext/mssql 函數(shù)
datefmt_set_timezone_id()IntlDateFormatter::setTimeZoneID()
set_magic_quotes_runtime(), 和它的別名 magic_quotes_runtime()
set_socket_blocking()
dl()在 PHP-FPM 不再可用,在 CLI 和 embed SAPIs 中仍可用

  1. MYSQL擴展需要替換成MYSQLI擴展
  2. 相關(guān)擴展庫可能需要升級 如 memcache

以下都是都是廢棄特性

  1. phpredis5 以后廢棄了別名類操作
    如:

settimeout -> expire
delete -> del

  1. each() 語法
  2. 靜態(tài)調(diào)用非靜態(tài)方法
  3. foreach不再改變內(nèi)部數(shù)組指針
    這個需要注意下,內(nèi)部指針可能需要next()
  4. mcrypt 相關(guān)函數(shù)需要變更成 openssl相關(guān)函數(shù)
    貼幾個可能用得到的對應(yīng)加密方法
MCRYPT_RIJNDAEL_128 | MCRYPT_MODE_ECB => AES-128-ECB
MCRYPT_DES | MCRYPT_MODE_CBC => DES-CBC
MCRYPT_RIJNDAEL_128 | MCRYPT_MODE_CBC => AES-128-CBC
MCRYPT_XTEA | MCRYPT_MODE_CBC
  1. 字符串不再支持空索引操作符
  2. php4風格的構(gòu)造函數(shù)
  3. 關(guān)于間接使用變量、屬性和方法的變化 ?
    這個需要格外注意一下,但是這個東西不好排查
$$foo['bar']['baz'] ${$foo['bar']['baz']}   ($$foo)['bar']['baz']
$foo->$bar['baz']   $foo->{$bar['baz']} ($foo->$bar)['baz']
$foo->$bar['baz']() $foo->{$bar['baz']}()   ($foo->$bar)['baz']()
Foo::$bar['baz']()  Foo::{$bar['baz']}()    (Foo::$bar)['baz']()

具體情況最好把 error_reporting 打開 自己查找一下自己程序中報的錯

棄用的東西其實挺多的,以上列舉了一些我遇到的問題,我這邊給公司整理了一個文檔,詳細些,有需要的我可以分享給你,good luck!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容