您好,登錄后才能下訂單哦!
這篇文章將為大家詳細(xì)講解有關(guān)PHP 7.4新特性有哪些,小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。
短閉包實(shí)現(xiàn)更簡潔的單行書寫。
array_map(function (User $user) { return $user->id; }, $users)
array_map(fn(User $user) => $user->id, $users)
關(guān)于短閉包的一些注意事項(xiàng):
use
關(guān)鍵字。$this
可以像普通的閉包一樣使用。return
語句。你可以在這里深入閱讀它們。
類屬性可以提示類型:
class A { public string $name; public Foo $foo; }
我之前寫過 PHP 的類型體系,所以很高興看到一些 PHP 的核心被改進(jìn)了。
類型差異是一個(gè)值得博客文章討論的主題;簡而言之:你將能夠使用協(xié)變量返回類型。。。
class ParentType {} class ChildType extends ParentType {} class A { public function covariantReturnTypes(): ParentType { /* … */ } } class B extends A { public function covariantReturnTypes(): ChildType { /* … */ } }
。。。和反變量。
class A { public function contraVariantArguments(ChildType $type) { /* … */ } } class B extends A { public function contraVariantArguments(ParentType $type) { /* … */ } }
不再需要這樣做:
$data['date'] = $data['date'] ?? new DateTime();
你可以這樣做:
$data['date'] ??= new DateTime();
現(xiàn)在你可以在數(shù)組中使用展開運(yùn)算符:
$arrayA = [1, 2, 3]; $arrayB = [4, 5]; $result = [0, ...$arrayA, ...$arrayB, 6 ,7]; // [0, 1, 2, 3, 4, 5, 6, 7]
請注意,這僅適用于帶數(shù)字鍵的數(shù)組。
外部函數(shù)接口,簡稱 FFI,允許從用戶區(qū)調(diào)用 C 代碼。這意味著 PHP 擴(kuò)展可以用純 PHP 編寫。
應(yīng)該指出,這是一個(gè)復(fù)雜的話題。您仍然需要 C 知識(shí)才能正確使用此功能。
預(yù)加載是 PHP 核心的一個(gè)振奮人心的新功能,可以帶來不可預(yù)估的性能改進(jìn)。
簡而言之:如果您今天使用的是框架,則必須在每次請求時(shí)加載和重新編譯其文件。預(yù)加載允許服務(wù)器在啟動(dòng)時(shí)于內(nèi)存中加載 PHP 文件,并使它們持久化可用于所有后續(xù)請求(只要不停電)。
性能提升當(dāng)然需要付出代價(jià):如果預(yù)加載文件的源文件發(fā)生變化,則必須重新啟動(dòng)服務(wù)器(該部分若有異議,請查看 RFC 詳細(xì)介紹)
RFC 增加了兩個(gè)新的魔術(shù)方法:__serialize
和 __unserialize
。這些方法和 __sleep
以及 __wakeup
的不同之處已經(jīng)在 RFC 中進(jìn)行了討論。
如果你書寫了類似以下的內(nèi)容:
echo "sum: " . $a + $b;
PHP 之前會(huì)像這樣編譯它:
echo ("sum: " . $a) + $b;
而 PHP 8 將使它如下編譯:
echo "sum :" . ($a + $b);
當(dāng)在遇到?jīng)]有圓括號包含的 '+' 或 ' - ' 表達(dá)式之前有 '.' 的時(shí)候,PHP 7.4 會(huì)提示棄用警告。
這在技術(shù)上不是與 PHP 7.4 相關(guān)的更新,但值得一提的是:RFC的投票規(guī)則已經(jīng)改變。
像 Symfony 的 var dumper 這樣的庫嚴(yán)重依賴于反射 API 來可靠地轉(zhuǎn)儲(chǔ)變量。以前,沒有對參考文獻(xiàn)提供適當(dāng)?shù)姆从持С?,?dǎo)致這些庫依賴于黑客來檢測反映。
PHP 7. 4 添加了 ReflectionReference
解決此問題的類。
mb_str_split
函數(shù) RFC此函數(shù)提供與 str_split
多字節(jié)字符串相同的功能。
ext-hash
RFC正如標(biāo)題所說,此擴(kuò)展現(xiàn)在可在所有 PHP 安裝中永久支持使用。
由于 PEAR 不再支持維護(hù),核心團(tuán)隊(duì)決定在 PHP 7.4 中刪除它的默認(rèn)安裝。
對如何使用散列庫進(jìn)行內(nèi)部更改,以便用戶可以更輕松地使用它們。
ext/wwdx
RFC此數(shù)據(jù)交換格式從未標(biāo)準(zhǔn)化,現(xiàn)在已經(jīng)棄用該擴(kuò)展。
短開標(biāo)簽 <?
已被棄用,將在 PHP 8 中刪除。短聲明標(biāo)記 <?=
不受影響。
三元運(yùn)算符在 PHP 中有一些奇怪的怪癖。此 RFC 為嵌套的三元語句添加了棄用。在 PHP 8 中,此棄用將轉(zhuǎn)換為編譯時(shí)錯(cuò)誤。
1 ? 2 : 3 ? 4 : 5; // deprecated (1 ? 2 : 3) ? 4 : 5; // ok
升級PHP版本時(shí),您應(yīng)該始終查看完整的 UPGRADING 文檔。
以下是一些突出顯示的向后不兼容的更改:
var_dump
一個(gè) DateTime
或 DateTimeImmutable
實(shí)例后面將不再保留對象的可訪問屬性。openssl_random_pseudo_bytes
將在錯(cuò)誤情況下拋出異常。PDO
或 PDOStatement
實(shí)例將生成一個(gè) Exception
而不是一個(gè) PDOException
。調(diào)用 get_object_vars()
上的 ArrayObject
實(shí)例將返回的屬性 ArrayObject
本身,而不是包裝的數(shù)組或?qū)ο蟮闹?。請注意?code>(array) 強(qiáng)制轉(zhuǎn)換不受影響。
關(guān)于PHP 7.4新特性有哪些就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。