溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

PHP 7.4新特性有哪些

發(fā)布時(shí)間:2020-10-22 15:09:34 來源:億速云 閱讀:196 作者:小新 欄目:編程語言

這篇文章將為大家詳細(xì)講解有關(guān)PHP 7.4新特性有哪些,小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

PHP 7.4中的新功能

  • 發(fā)布日期可能在 2019 年 12 月左右,尚待確認(rèn)
  • 短閉包,可實(shí)現(xiàn)更簡潔的單行書寫
  • 預(yù)加載,以提高性能
  • 類中的類型屬性
  • 自定義對象序列化添加一種(反)序列化對象的新方法
  • 改進(jìn)類型差異
  • 簡化 Null 合并運(yùn)算符
  • FFI 為 PHP 擴(kuò)展開發(fā)開辟新機(jī)遇
  • 棄用短開標(biāo)簽
  • 在數(shù)組中支持展開運(yùn)算符
  • 閱讀以下內(nèi)容了解更多

短閉包 RFC

短閉包實(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 語句。

你可以在這里深入閱讀它們。

類型屬性  RFC

類屬性可以提示類型:

class A
{
    public string $name;

    public Foo $foo;
}

改進(jìn)的類型差異 RFC

我之前寫過 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)
    { /* … */ }
}

Null 合并運(yùn)算符 RFC

不再需要這樣做:

$data['date'] = $data['date'] ?? new DateTime();

你可以這樣做:

$data['date'] ??= new DateTime();

數(shù)組展開運(yùn)算符 RFC

現(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ù)接口 RFC

外部函數(shù)接口,簡稱 FFI,允許從用戶區(qū)調(diào)用 C 代碼。這意味著 PHP 擴(kuò)展可以用純 PHP 編寫。

應(yīng)該指出,這是一個(gè)復(fù)雜的話題。您仍然需要 C 知識(shí)才能正確使用此功能。

預(yù)加載 RFC

預(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

RFC 增加了兩個(gè)新的魔術(shù)方法:__serialize__unserialize 。這些方法和 __sleep 以及 __wakeup 的不同之處已經(jīng)在 RFC 中進(jìn)行了討論。

連接優(yōu)先級 RFC

如果你書寫了類似以下的內(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ì)提示棄用警告。

RFC 投票流程改進(jìn)

這在技術(shù)上不是與 PHP 7.4 相關(guān)的更新,但值得一提的是:RFC的投票規(guī)則已經(jīng)改變。

  • 他們將總是需要 2/3 的大半支持才能通過。
  • 投票時(shí)間不短,所有RFC必須至少開放 2 周。

參考文獻(xiàn)的反思 RFC

像 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 安裝中永久支持使用。

默認(rèn)不啟用 PEAR EXTERNALS

由于 PEAR 不再支持維護(hù),核心團(tuán)隊(duì)決定在 PHP 7.4 中刪除它的默認(rèn)安裝。

密碼哈希注冊表RFC

對如何使用散列庫進(jìn)行內(nèi)部更改,以便用戶可以更輕松地使用它們。

棄用ext/wwdx RFC

此數(shù)據(jù)交換格式從未標(biāo)準(zhǔn)化,現(xiàn)在已經(jīng)棄用該擴(kuò)展。

PHP 短標(biāo)簽被棄用 RFC

短開標(biāo)簽 <? 已被棄用,將在 PHP 8 中刪除。短聲明標(biāo)記 <?= 不受影響。

左關(guān)聯(lián)三元運(yùn)算符被棄用 RFC

三元運(yùn)算符在 PHP 中有一些奇怪的怪癖。此 RFC 為嵌套的三元語句添加了棄用。在 PHP 8 中,此棄用將轉(zhuǎn)換為編譯時(shí)錯(cuò)誤。

1 ? 2 : 3 ? 4 : 5;   // deprecated
(1 ? 2 : 3) ? 4 : 5; // ok

向后不兼容的更改 UPGRADING

升級PHP版本時(shí),您應(yīng)該始終查看完整的 UPGRADING 文檔。

以下是一些突出顯示的向后不兼容的更改:

  • 調(diào)用 var_dump 一個(gè) DateTimeDateTimeImmutable 實(shí)例后面將不再保留對象的可訪問屬性。
  • openssl_random_pseudo_bytes 將在錯(cuò)誤情況下拋出異常。
  • 嘗試序列化一個(gè) PDOPDOStatement 實(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ò),可以把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

免責(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)容。

php
AI