PHP7是PHP程式設計語言全新的一個版本,在性能方面獲得了極大的提升。官方的文檔顯示,PHP7可以達到PHP5.x版本兩倍的性能。同時還提供了很多其他語言流行的文法格式。另外其PHP7的相容性也是非常好的。是以,其他版本向PHP7遷移過程中,程式調整不會太大。本文不針對性能提升原因做深入研究,主要是簡單描述一下PHP7一些新增的特性。
在PHP5中,可以将函數參數指定為類名、接口名、數組和回調類型中的一種,但是無法将類型指定為标量。PHP7中新增了對函數參數聲明為四種标量類型的支援,即可以指定參數類型為整型(int)、浮點型(float)、字元串(string)以及布爾型(bool)。
PHP7新增了對函數傳回類型聲明的支援,支援的類型與參數類型相同(在PHP7.1中支援傳回void類型)。
函數參數以及函數傳回值支援的類型見下表:

标量的聲明有2中模式:1、嚴格模式;2、強制模式(預設)。可以在檔案頂部通過decalre關鍵字來修改标量聲明模式。強制模式下如果值的類型與聲明的不符合,PHP會盡量進行轉換到對應類型。但是,如果是嚴格模式下,值與類型不符合,則會出現一個錯誤。
PHP5.6及以後版本中可以通過const關鍵字來定義常量數組,PHP7中新增可以通過define定義常量數組功能。
php5.5中實作了生成器yield,但是生成器函數不可以有傳回值,但是return空是一個有效的文法并且它将會終止生成器繼續執行。生成器函數隻能通過yield關鍵字來生成值。php7中允許在生成器函數中通過使用 return 文法來傳回一個表達式 (但是不允許傳回引用值), 可以通過調用 Generator::getReturn() 方法來擷取生成器的傳回值, 但是這個方法隻能在生成器完成産生工作以後調用一次。
php7可以在外層生成器中使用 yield from, 就可以把一個生成器自動委派給其他的生成器, Traversable 對象或者 array。
後端CGI在接收使用者傳入的資料時通常會先判斷變量是否存在,如果存在擷取對應的值,如果不存在,在設定一個預設值或者報錯處理。這裡就會用到 三元運算符和isset。在PHP7中新增了一個文法糖??。如果第一個操作數存在且不為null則傳回第一個操作數的值,否則傳回第二個操作數的值。例如:
該操作符也稱為太空梭操作符,用于對2個表達式進行比較并傳回比較結果。使用文法:$exp1 <=> $exp2。如果$exp1小于$exp2傳回-1,$exp1等于$exp2傳回0,$exp1大于$exp2傳回1。比較的原則是沿用 PHP 的正常比較規則進行的。
Closure是用來表示匿名函數的類,可以稱作為閉包類。任何一個匿名函數PHP都會自動産生一個Closure類的對象。如果需要複制一個閉包對象且調用它,在PHP7之前版本,寫法較為繁瑣,而在PHP7可以通過call方法來快速實作。
未了避免篇幅過長,本文沒有列舉PHP7中所有新特性,其餘新特性将在後續文章中陸續補充。
關于文章示例代碼說明:本文中代碼均在PHP7.1.4版本中進行了測試。部分代碼采用了PHP官網代碼。