向后不兼容
雖然大部分 PHP 5 的代碼無需修改即可正常運行身堡, 但是有部分代碼是無法向后兼容的:
使用數(shù)組標識符為類定義數(shù)組類型的屬性時草冈,數(shù)組的鍵不會被覆蓋
在 PHP 5.6 之前的版本中屏箍,為類定義數(shù)組類型的屬性時葱椭, 如果數(shù)組中同時使用了顯式數(shù)組鍵和隱式數(shù)組鍵幅聘,并且顯式的鍵和隱式的序列鍵相同梯找, 那么數(shù)組的鍵將被覆蓋。例如:
嚴格的?json_decode()
對于 JSON 字面量?true,false?和?null获枝,如果不采用小寫格式,將會被?json_decode()?函數(shù)拒絕骇笔, 同時相應(yīng)的設(shè)置?json_last_error()省店。 在之前的版本中,json_decode()?函數(shù)可以接受這些字面量的 全部大寫或者大小寫混寫的格式笨触。
此變更僅會影響傳入到?json_decode()?中的 JSON 格式無效的情況懦傍, 有效的 JSON 輸入不會受到影響并且能夠正確解析。
Mcrypt?函數(shù)需要有效長度的密鑰和初始向量
mcrypt_encrypt()芦劣,mcrypt_decrypt()粗俱,?mcrypt_cbc(),mcrypt_cfb()虚吟,?mcrypt_ecb()寸认,mcrypt_generic()?以及?mcrypt_ofb()?函數(shù)不再接受無效長度的密鑰和初始向量, 對于需要初始向量的分組加密模式串慰,如果不提供初始向量偏塞,函數(shù)調(diào)用將會失敗。
cURL?文件上傳
必須先設(shè)置 CURLOPT_SAFE_UPLOAD 為?FALSE?才能夠使用 @file 語法來上傳文件邦鲫。 建議使用?CURLFile?類來上傳文件灸叼。
新特性
使用表達式定義常量
在之前的 PHP 版本中, 必須使用靜態(tài)值來定義常量掂碱,聲明屬性以及指定函數(shù)參數(shù)默認值怜姿。 現(xiàn)在你可以使用包括數(shù)值、字符串字面量以及其他常量在內(nèi)的數(shù)值表達式來 定義常量疼燥、聲明屬性以及設(shè)置函數(shù)參數(shù)默認值沧卢。
現(xiàn)在可以通過?const?關(guān)鍵字來定義類型為?array?的常量。
const?ARR?=?['a',?'b'];
echo? ?ARR[0];
使用?...?運算符定義變長參數(shù)函數(shù)
現(xiàn)在可以不依賴?func_get_args()醉者, 使用?...?運算符 來實現(xiàn)?變長參數(shù)函數(shù)但狭。
function?f($req,?$opt?=?null,?...$params)?{? //?$params?是一個包含了剩余參數(shù)的數(shù)組
printf('$req:?%d;?$opt:?%d;?number?of?params:?%d'."\n",
????????$req,?$opt,?count($params));
}
f(1);
f(1,?2);
f(1,?2,?3);
f(1,?2,?3,?4);
f(1,?2,?3,?4,?5);
使用?...?運算符進行參數(shù)展開
function?add($a,?$b,?$c)?{
return? $a?+?$b?+?$c;
}
$operators?=?[2,?3];
echo? add(1,?...$operators);
使用?**?進行冪運算
加入右連接運算符?**?來進行冪運算披诗。 同時還支持簡寫的?**=?運算符,表示進行冪運算并賦值立磁。
use function?以及?use const
use?運算符 被進行了擴展以支持在類中導入外部的函數(shù)和常量呈队。 對應(yīng)的結(jié)構(gòu)為?use function?和?use const。
默認字符編碼
對于一些字符編碼相關(guān)的函數(shù)唱歧,例如?htmlentities()宪摧,?html_entity_decode()?以及?htmlspecialchars()?使用?default_charset?作為默認字符集。請注意颅崩,對于 iconv(現(xiàn)已廢棄) 和 mbstring 相關(guān)的函數(shù)几于, 如果分別設(shè)置了他們的編碼, 那么這些對應(yīng)設(shè)置的優(yōu)先級高于 default_charset沿后。
default_charset 的默認值是?UTF-8沿彭。
php://input?是可重用的了
只要你需要,你可以多次打開并讀取?php://input尖滚。 同時喉刘,這個特性使得在處理 POST 的數(shù)據(jù)的時候, 可以明顯降低對于內(nèi)存的需求量漆弄。
大文件上傳
現(xiàn)在可以支持大于 2GB 的文件上傳睦裳。
函數(shù)的變化
PHP 內(nèi)核
如果省略?salt?參數(shù),crypt()?會產(chǎn)生?E_NOTICE錯誤置逻。
substr_compare()?的?length?參數(shù)現(xiàn)在接受?0?的值推沸。
unserialize()?如果傳遞的序列化數(shù)據(jù)已被操作以嘗試在不調(diào)用其構(gòu)造函數(shù)的情況下實例化對象,則現(xiàn)在將失敗券坞。
cURL
只有設(shè)置?CURLOPT_SAFE_UPLOAD?為?FALSE?的情況下, 才接受?@file?語法上傳文件肺素。 最好使用?CURLFile?代替恨锚。
Mcrypt
mcrypt_create_iv()?的?source?現(xiàn)在默認值是?MCRYPT_DEV_URANDOM,而非?MCRYPT_DEV_RANDOM倍靡。
OpenSSL
如果 SSL 上下文選項已經(jīng)提供?crypto_type?選項猴伶,?stream_socket_enable_crypto()?可以忽略?crypto_type?參數(shù)。
新加的函數(shù)
日期和時間??DateTimeImmutable::createFromMutable()
GMP
Hash
LDAP
MySQLi
????????mysqli_get_links_stats()
OCI8
????????oci_get_implicit_resultset()
OpenSSL
????????openssl_get_cert_locations()
????????openssl_x509_fingerprint()
????????openssl_spki_export_challenge()