簡要概述php7.0、php7.1、php7.2、php7.3、php7.4特性,php5.6之後的高版本對網站開發有哪些優勢
PHP 官方宣佈在2018 年12 月31 日起PHP 5.6.x 的安全支持將正式停止,那麼到時候,你的網站如果還跑在PHP 5.6 上面的話,將不再安全。PHP 7 是跨時代的版本,但是PHP 7 在2019 年之後就將不再維護了。而基本可以確認的是php7.4將是php7系列最後一個版本,php8有望在2020年發布。PHP 升級到7 之後,效率直接提高了2-3 倍,有開啟OPCCache 的PHP 7,有測試,比PHP 5.6 都快近10 倍(偶爾),是數量級的差別。舉幾個自己最常用的新語法特性,其他請移駕官網查詢:
PHP7.0:
??語法:日常使用中存在大量同時使用三元表達式和isset()的情況,PHP 7添加了null合併運算符(??)這個語法糖,如果變量存在且值不為NULL,它就會返回自身的值,否則返回它的第二個操作數。例如:website = $_GET[‘www.longshangyun.com’] ?? ‘m.longshangyun.com’;
太空船操作符:太空船操作符用於比較兩個表達式,比如下面當$a小於、等於或大於$b時它分別返回-1、0或1。例如:echo $a <=> $b;
define()定義常量數組:array類型的常量現在可以通過define()來定義
PHP7.1:
可為空(nullable)類型:參數以及返回值的類型現在可以通過在類型前加上一個問號使之允許為空。當啟用這個特性時,傳入的參數或者函數返回的結果要么是給定的類型,要么是null。
void函數:一個新的返回值類型void被引入。返回值聲明為void類型的方法要么乾脆省去return語句,要么使用一個空的return語句。對於void函數來說,NULL
不是一個合法的返回值。
類常量的可見性:例如:const PUBLIC_CONST_A = 1; public const PUBLIC_CONST_B = 2; protected const PROTECTED_CONST = 3;
多異常捕獲處理:一個catch語句塊現在可以通過管道字符( | )來實現多個異常的捕獲。這對於需要同時處理來自不同類的不同異常時很有用。
短數組語法:現在list()支持在它內部去指定鍵名,這意味著它可以將任意類型的數組都賦值給一些變量。例如:while (list (‘id’ => $id, ‘name’ => $name) => $data ) { //logic here with $id and $name}
廢棄:移除mcrypt_*序列函數,推薦使用:openssl序列函數
PHP7.2:
新的對像類型:這種新的對像類型,object,引進了可用於逆變(contravariant)參數輸入和協變(covariant)返回任何對像類型。
通過名稱加載擴展:擴展文件不再需要通過文件加載(Unix下以.so 為文件擴展名,在Windows下以 .dll 為文件擴展名)進行指定。可以在php.ini配置文件進行啟用,也可以使用dl()函數進行啟用。
允許重寫抽象方法(Abstract method):當一個抽像類繼承於另外一個抽像類的時候,繼承後的抽像類可以重寫被繼承的抽像類的抽象方法。
使用Argon2算法生成密碼散列: Argon2已經被加入到密碼散列(password hashing) API (這些函數以 password_ 開頭)。
廢棄:不帶引號的字符串:不帶引號的字符串是不存在的全局常量,轉化成他們自身的字符串。在以前,該行為會產生 E_NOTICE
,但現在會產生 E_WARNING
。在下一個PHP主版本中,將拋出Error異常。廢棄each函數
PHP7.3:
is_countable函數:在PHP 7.2 中,用count() 獲取對象和數組的數量。如果對像不可數,PHP 會拋出警告⚠️ 。所以需要檢查對像或者數組是否可數。PHP 7.3 提供新的函數is_countable() 來解決這個問題。
array_key_first(),array_key_last():當前版本的PHP允許使用 reset()
,end()
和 key()
等方法,通過改變數組的內部指針來獲取數組首尾的鍵和值。現在,為了避免這種內部干擾,PHP 7.3推出了新的函數來解決這個問題:獲取數組第一個元素的鍵名&獲取數組最後一個元素的鍵名
相同站點cookie:建議在使用cookies 時,增加同站點標誌。
廢棄:大小寫不敏感的常量。廢棄:將一個非字符串內容傳遞給字符串搜索函數。在將來所有待搜索的內容都將被視為字符串,而不是ASCII 編碼值。如果需要依賴這個特性,你應該要么顯示地進行類型轉換(轉為字符串),或者顯示地調用chr()。
PHP7.4:預計今年年末發布
預加載:預加載的實現理論上是可以為PHP帶來很大的性能提升的。比如說:現在傳統的PHP框架或者項目,都是有一次請求就加載和重新編譯一次文件的。預加載的實現使得我們可以直接將PHP文件加載到內存中,並一次來永駐內存來應對後續的請求。不過預加載也會帶來一點機器內存要求和一些損耗,你還需要注意的是,每次在更新完PHP文件之後,你需要重啟服務才可以使得新的PHP文件生效。
新的null三元操作符:$data
[
'date'
] ??=
new
DateTime();
自定義對象序列化:增加了 __serialize
和 __unserialize
這兩個魔術方法,你可以用來自定義對象的序列化。
新增mb_str_split函數:這個函數就是 str_split
函數的mb (multi bytes)版本,跟你接觸過的 mb_substr
和 substr
是同理的。
PHP8:有望在2020年發布。
最讓人期待就是php版的JIT,當前JIT還只是php的一個分支,並且已經進行過多次測試,有望在php8合併到主分支。
來源: https://www.longshangyun.com/baike/details.html?id=16992255187