中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

PHP7.4新增了哪些特性

發布時間:2020-06-09 16:31:21 來源:億速云 閱讀:189 作者:元一 欄目:編程語言

PHP7.4新增加了FFI擴展功能,它可以讓我們通過php代碼,就可以直接訪問c語言函數和變量以及結構體。

  1. GD庫擴展新增加了TGA圖片的支持

  2. SQLite3支持線上備份

  3. OpenSSL版本支持TLS1.3

  4. 短閉包的支持

  5. 預加載的支持

  6. 自定義序列化

  7. 改進類型差異

  8. 簡化Null合并運算符

  9. 棄用短標簽

  10. 數組支持展開運算符

相信大家對此或多或少都已經有所了解了。本文將為大家總結一下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 是一個函數,其次是針對常量數組&ldquo;編譯時&rdquo;的優化。因此 PHP 7.4 的性能將會提升。
  
  9、為引用提供的反射
  

類似于 symfony/var-dumper 之類的庫,嚴重依賴 Reflection API 來準確羅列變量。原來,對于引用反射沒有很好的支持,這迫使這些庫只能依靠 hack 的方式來檢測引用。在 PHP 7.4 中添加了 ReflectionReference 類來解決此問題。
  

10、協變量返回和協變量參數
  

目前,PHP 中大多數是不變的參數類型和不變的返回類型,這帶來了一些約束。隨著協變量(類型從更具體到更通用)返回和協變量(類型從更通用到更具體)參數的引入,PHP 開發者們將能夠將參數類型更改為超類型之一。
  

雖然php7.4的性能提升相對來說很小,但是可以看出,在功能增加的情況下,性能依然在穩步提升。這些性能的提升,讓我們很期待,也很堅信php8將會有更好的未來。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

利川市| 唐山市| 兴安盟| 特克斯县| 旬阳县| 卢龙县| 莱州市| 贵阳市| 兴安盟| 琼海市| 城固县| 海阳市| 思茅市| 军事| 开鲁县| 沙洋县| 天水市| 大化| 邮箱| 莱阳市| 随州市| 浏阳市| 大埔区| 旺苍县| 且末县| 东乡族自治县| 宁南县| 礼泉县| 晋中市| 奇台县| 冕宁县| 北票市| 贺兰县| 桐城市| 彩票| 永顺县| 大庆市| 蒲江县| 七台河市| 扎鲁特旗| 大渡口区|