1、前言php
php7目前(截止2018-09-17),最新的穩定版本是7.2.10(http://php.net/downloads.php上可查看版本信息),目前還有很多項目是用5.6甚至更早的版本。相比於php5.x的版本,php7有很多新的改進,性能方面也是有很多提高。下面來詳細講下。數組
2、新特性php7
一、php7.0相比於php5.6的新特性dom
參考:http://php.net/manual/zh/migration70.new-features.php 下面所講的內容都是來自於這篇文章,只是詳細地解釋。函數
1.1 標量類型聲明oop
函數/方法中的參數,是能夠加一個類型聲明的,這個是php5.0就開始支持的,好比:性能
function testClass(類名 $c)優化
{url
}spa
function testArray(array $a)
{
}
php5.x支持的這個類型很少,php7增長了幾個:
參考:http://php.net/manual/zh/functions.arguments.php#functions.arguments.type-declaration
這裏的意思是,方法的參數的類型,只支持上面列出的這些類型,若是是其餘類型,php5報錯致命錯誤,php7會報錯TypeError的異常。
舉個例子:
function test (boolean $b)
{
}
test(true);
執行結果:
Fatal error: Uncaught TypeError: Argument 1 passed to test() must be an instance of boolean, boolean given, called in - on line 1 and defined in -:1
這裏報錯的緣由是參數類型boolean不是一個合法的類型,上面截圖中能夠看到是bool纔對,不能用boolean。這裏有點很差理解,就是咱們大多會認爲boolean就是bool,因此這裏應該是規定好的,就是隻能用bool,不能用boolean。
同理,用integer也是錯的,要用int。 float是包含了float和double的,若是用double也是會報錯的。再解釋下,用boolean的時候,由於不是bool,也不是int、float、self、array等,因此這個boolean會被認爲是class或者interface,
報錯信息裏面展現的是參數必須是boolean(類或接口)的一個實例,可是調用時傳入的參數是boolean類型(true的類型)。有點繞,可是應該不難理解。
1.2 返回值類型聲明
返回值的類型,跟參數的類型一致。
【注意】在默認狀況下,函數返回值若是和定義的不一致,會進行強制轉換,在嚴格模式下,則會報錯TypeError。
這個例子這裏是強制轉換了類型。
函數返回值的說明參考:http://php.net/manual/zh/functions.returning-values.php#functions.returning-values.type-declaration
1.3 null合併運算符
1.4 太空船操做符(暫時不清楚這個操做符有什麼實際用處,後續瞭解清楚再補充上)
1.5 define容許定義常量數組
咱們來看下define的聲明,參考:http://php.net/manual/zh/function.define.php
這個新特性大概是爲了豐富define的功能,const已經實現了這個功能了的。
1.6 匿名類
詳細的匿名類參考:http://php.net/manual/zh/language.oop5.anonymous.php
【備註】考慮到篇幅問題,先跳過中間幾個我的以爲不太經常使用的特性
1.7 use分組命名空間
這裏能夠用一行代碼引入同一個命名空間下的多個類,而不是以前那樣須要每一個類一行代碼,算是一種優化。
1.8 新增整數整除的函數intdiv()
返回值爲整型。
參考:http://php.net/manual/zh/function.intdiv.php
1.9 新增的隨機函數
參考:
http://php.net/manual/zh/function.random-bytes.php
http://php.net/manual/zh/function.random-int.php
二、php7.1相對於php7.0的新特性
參考:http://php.net/manual/zh/migration71.new-features.php
涉及的內容很少,直接看上面的url便可。
三、php7.2相對於php7.1的新特性
參考:http://php.net/manual/zh/migration72.new-features.php
涉及的內容很少,直接看上面的url便可。