您好,登錄后才能下訂單哦!
PHP7.4新增加了FFI擴展功能,它可以讓我們通過php代碼,就可以直接訪問c語言函數和變量以及結構體。
GD庫擴展新增加了TGA圖片的支持
SQLite3支持線上備份
OpenSSL版本支持TLS1.3
短閉包的支持
預加載的支持
自定義序列化
改進類型差異
簡化Null合并運算符
棄用短標簽
數組支持展開運算符
相信大家對此或多或少都已經有所了解了。本文將為大家總結一下PHP7.4新增的十大特性,分別是支持從 __toString() 方法拋出異常;類型化屬性的支持;弱引用;箭頭函數的支持;預加載;新的自定義對象序列化機制;合并分配運算符;數組表達式中的展開運算符;為引用提供的反射以及協變量返回和協變量參數。下面我們一起來看看新特性的詳細總結。
1、支持從 __toString() 方法拋出異常
之前無法從 __toString 方法中拋出異常。原因是標準庫中的許多函數都執行從對象到字符串的轉化,它們當中并非所有的都準備好正確的“處理”異常。作為該 RFC 的一部分,對代碼庫中的字符串轉換進行了全面的審核,并取消了此限制。
2、類型化屬性的支持
在下一個版本引入類型化屬性可能被視為 PHP 最重要的特性更新之一。雖然之前不可能將聲明方法用于類變量和屬性(包括靜態屬性),但現在程序員能很輕松地進行編碼,而無需創建特定的 getter 和 setter 方法。由于聲明類型(不包括 void 和 callable),你可以使用可為空(Nullable)類型,即 int、float、array、string、object、iterable、self、bool 和 parent。如果一位 web 開發者嘗試從類型中分配一個不相關的值,例如,聲明 name 變量為字符串類型,他或她就會接收到 TypeError 的報錯。像箭頭函數一樣,類型化屬性也能讓 PHP 工程師寫出更簡短和清晰的代碼。
3、弱引用
在 PHP 7.4 中,弱引用類(WeakReference class)允許 web 開發者們將鏈接保存到不阻止其銷毀的對象中。請勿將弱引用類和弱引用擴展混淆。由于這些特性,它們更容易實現類似緩存的結構。請參考使用此類的示例:
<php
$obj = new stdClass;
$weakref = WeakReference::create($obj);
var_dump($weakref->get());
unset($obj);
var_dump($weakref->get());
>
另外,請注意,你無法序列化弱引用。
4、箭頭函數的支持
由于匿名函數或閉包主要應用于 JS 中,因此,他們在 PHP 中似乎很啰嗦,他們的實現和程序的維護也會更復雜一些。引入對箭頭函數的支持使得 PHP 開發者大大簡化他們的代碼并且使語法更加簡潔。這樣,你代碼的可讀性和簡潔性會大大提高。看下面的例子。因此,如果是以前的話,你必須按以下代碼塊寫:
function cube($n){
return ($n * $n * $n);
}
$a = [1, 2, 3, 4, 5];
$b = array_map('cube', $a);
print_r($b);
$parts = ['apple', 'pear'];
$fruits = ['banana', 'orange', ...$parts, 'watermelon'];
var_dump($fruits);
同樣,它也有可能展開同一數組多次。此外,由于可以在擴展運算符的前后添加普通元素,因此 PHP 開發人員將能夠在數組中使用其語法。
在 PHP 7.4 發布后,你就可以按如下的方法寫:
$a = [1, 2, 3, 4, 5];
$b = array_map(fn($n) => $n * $n * $n, $a);
print_r($b);
由于擁有了創建整齊、更短代碼的能力。web 開發過程將會更快,也節省了你的時間。
5、預加載
這個很酷新特性的主要目的是提升 PHP 7.4 的性能。簡而言之,預加載是在 OPcache[10] 中加載文件、框架和庫的過程,絕對是新版本的最佳補充。例如,如果你使用框架,則必須為每個請求下載并重新編譯其文件。在配置 OPcache 的時候,這些代碼文件首次參與請求處理,然后每次都檢查它們的更改。預加載使服務器可以將指定的代碼文件加載到共享內存中。請務必注意,它們將始終可用于后續所有的請求,而無需檢查其他文件的改變。還值得一提的是,在預加載期間,PHP 還消除了不必要的包含,并解決了類依賴以及具有 Traits 和 Interfaces 等的鏈接。
6、新的自定義對象序列化機制
在 PHP 新的版本中,有兩種新的可用方法 serialize 和 unserialize。將 Serializable 接口的多功能性與實現 sleep 和 wakeup 方法結合起來,這種序列化機制使得 PHP 開發者可以避免與已存在的方法產生一些自定義的問題。發現有關 PHP 特性的更多信息。
7、合并分配運算符
合并運算符是 PHP 7.4 提供的另一個新功能。當你需要將三元運算符和 isset 方法一起使用時非常有用。如果它存在且不為空,那么就會返回第一個操作數,否則就會返回第二個操作數。這就是個例子:
<php
// 獲取 $_GET['user'] 的值,如果它不存在則返回 nobody
$username = $_GET['user'] ?? 'nobody';
// 這等價于:
$username = isset($_GET['user']) ? $_GET['user'] : 'nobody';
// 鏈式合并:將返回 $_GET['user']、$_POST['user'] 以及 noboody 中第一個不為 NULL 的值
$username = $_GET['user'] ?? $_POST['user'] ?? 'nobody';
>
8、數組表達式中的展開運算符
與 array_merge 相比,在 PHP 7.4 中,工程師們能在數組中使用展開運算符。有兩個主要原因,首先,展開運算符被認為是一種語言結構,而 array_merge 是一個函數,其次是針對常量數組“編譯時”的優化。因此 PHP 7.4 的性能將會提升。
9、為引用提供的反射
類似于 symfony/var-dumper 之類的庫,嚴重依賴 Reflection API 來準確羅列變量。原來,對于引用反射沒有很好的支持,這迫使這些庫只能依靠 hack 的方式來檢測引用。在 PHP 7.4 中添加了 ReflectionReference 類來解決此問題。
10、協變量返回和協變量參數
目前,PHP 中大多數是不變的參數類型和不變的返回類型,這帶來了一些約束。隨著協變量(類型從更具體到更通用)返回和協變量(類型從更通用到更具體)參數的引入,PHP 開發者們將能夠將參數類型更改為超類型之一。
雖然php7.4的性能提升相對來說很小,但是可以看出,在功能增加的情況下,性能依然在穩步提升。這些性能的提升,讓我們很期待,也很堅信php8將會有更好的未來。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。