您現在的位置是:首頁 > PHP學習

PHP 7.4可能將于2019年12月發布

李清波2019-03-28PHP學習

PHP 7.4可能將于2019年12月發布。此頁面將定期更新。


Preloading預加載 rfc


Preloading(預加載)是對PHP核心的一個驚人的補充,它可以帶來一些主要的性能改進。


簡而言之:如果你今天使用的是框架,那么它的文件必須在每次請求時加載和重新編譯。預加載允許服務器在啟動時在內存中加載PHP文件,并使它們對所有后續請求永久可用。


性能的提高當然是有代價的:如果預加載文件的來源發生變化,則必須重新啟動服務器。


Typed properties rfc


類變量可以是類型提示:

class A
{
    public string $name;
     
    public Foo $foo;
}

更新:到目前為止,已合并了Typed properties,從而為PHP 7.4確認了這些屬性。


Improved type variance(改進的類型差異) rfc


我以前寫過關于PHP類型系統的文章,所以很高興看到PHP內核中出現了一些改進。


類型差異是一個值得自己發表博文的主題;


簡而言之:你將能夠使用covariant返回類型

class ParentType {}
class ChildType extends ParentType {}
 
class A
{
    public function covariantReturnTypes(): ParentType
    { /* … */ }
}
class B extends A
{
    public function covariantReturnTypes(): ChildType
    { /* … */ }
}


和contravariant參數。

class A
{
    public function contraVariantArguments(ChildType $type)
    { /* … */ }
}

 


class B extends A
{
    public function contraVariantArguments(ParentType $type)
    { /* … */ }
}

更新:RFC目前處于投票階段,但看起來它會毫無問題地通過。


Foreign Function Interface(外部函數接口) rfc


外部函數接口,簡稱FFI,允許從用戶域調用C代碼。這意味著PHP擴展可以用純PHP編寫。


值得注意的是,這是一個復雜的話題。你仍然需要C知識才能正確地使用這個特性。


Null合并賦值操作符 rfc


不是這樣做:

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

你可以這樣做:

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

更新:這個特性現在合并到PHP 7.4中。


自定義對象序列化 rfc


這個RFC添加了兩個新的魔術方法:__serialize和__unserialize。在RFC中討論了這些方法與__sleep和__wakeup方法的區別。


更新:RFC通過。這個特性將在PHP 7.4中添加。


No more narrow margins rfc


從技術上講,這并不是一個與PHP 7.4相關的更新,但它確實值得一提。RFC的投票規則已經改變:他們總是需要2/3的多數才能通過。


Reflection for references rfc


像Symfony的var轉儲程序這樣的庫很大程度上依賴于反射API來可靠地轉儲變量。以前,沒有對引用的適當反射支持,導致這些庫依賴hack來檢測引用。


PHP 7.4添加了ReflectionReference類,解決了這個問題。


更新:RFC已通過,PHP 7.4已確認更改。


添加mb_str_split rfc


這個函數提供了與str_split相同的功能,但是是在多字節字符串上。


始終啟用ext-hash rfc


正如標題所說,這個擴展現在在所有PHP安裝中都是永久可用的。


默認情況下不啟用PEAR


由于PEAR不再積極維護,核心團隊決定用PHP 7.4刪除其默認安裝。


密碼哈希(Hashing)注冊表 rfc


內部更改哈希庫的使用方式,以便用戶更容易地使用它們。


棄用ext / wwdx rfc


這種數據交換格式從來沒有標準化過,現在它的擴展被廢棄了。


向后不兼容的變更升級


在升級PHP版本時,應該始終查看完整的升級文檔。


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


? parent::在沒有父級的類中引用將生成編譯時錯誤而不是運行時錯誤。


? 在DateTime或datetimevariable實例上調用var_dump將不再在對象上留下可訪問的屬性。


? openssl_random_pseudo_bytes將在錯誤情況下拋出異常。


? 試圖序列化PDO或PDOStatement實例將生成異常,而不是PDOException。


? 在ArrayObject實例上調用get_object_vars()將返回ArrayObject本身的屬性,而不是被包裝的數組或對象的值。注意(數組)強制轉換不受影響。



翻譯自:https://stitcher.io/blog/new-in-php-74#reflection-for-references-rfc


評論