PHP8 發(fā)布啦

PHP 8.0 是 PHP 語言的一個主版本更新窄赋。

它包含了很多新功能與優(yōu)化項拷淘, 包括命名參數(shù)、聯(lián)合類型性锭、注解孵班、構(gòu)造器屬性提升涉兽、match 表達式、nullsafe 運算符篙程、JIT枷畏,并改進了類型系統(tǒng)、錯誤處理虱饿、語法一致性拥诡。

1. 命名參數(shù)?RFC

在php7 中:

htmlspecialchars($string,ENT_COMPAT|ENT_HTML401,'UTF-8',false);

在php8 中:

htmlspecialchars($string, double_encode: false);

僅僅指定必填參數(shù),跳過可選參數(shù)氮发。

參數(shù)的順序無關(guān)渴肉、自己就是文檔(self-documented)

2. 注解?RFC

在php7 中:

classPostsController{/**? ? * @Route("/api/posts/{id}", methods={"GET"})? ? */publicfunctionget($id){/* ... */}}

在php8 中:

classPostsController{#[Route("/api/posts/{id}", methods: ["GET"])]publicfunctionget($id){/* ... */}}

現(xiàn)在可以用 PHP 原生語法來使用結(jié)構(gòu)化的元數(shù)據(jù),而非 PHPDoc 聲明爽冕。

3. 構(gòu)造器屬性提升?RFC

在php7 中:

classPoint{publicfloat$x;publicfloat$y;publicfloat$z;publicfunction__construct(float$x=0.0,float$y=0.0,float$z=0.0,){$this->x=$x;$this->y=$y;$this->z=$z;}}

在php8 中:

classPoint{publicfunction__construct(publicfloat$x=0.0,publicfloat$y=0.0,publicfloat$z=0.0,){}}

更少的樣板代碼來定義并初始化屬性仇祭。

4. 聯(lián)合類型?RFC

在php7 中:

classNumber{/** @var int|float */private$number;/**? * @param float|int $number? */publicfunction__construct($number){$this->number=$number;}}newNumber('NaN');// Ok

在php8 中:

classNumber{publicfunction__construct(privateint|float$number){}}newNumber('NaN');// TypeError

相對于以前的 PHPDoc 聲明類型的組合, 現(xiàn)在可以用原生支持的聯(lián)合類型聲明取而代之颈畸,可在實際運行中驗證乌奇。

5. Match 表達式?RFC 文檔

在php7 中:

switch(8.0){case'8.0':$result="Oh no!";break;case8.0:$result="This is what I expected";break;}echo$result;//> Oh no!

在php8 中:

echomatch(8.0){'8.0'=>"Oh no!",8.0=>"This is what I expected",};//> This is what I expected

新的 match 類似于 switch,并具有以下功能:

Match 是一個表達式眯娱,它可以儲存到變量中亦可以直接返回礁苗。

Match 分支僅支持單行,它不需要一個 break; 語句徙缴。

Match 使用嚴格比較试伙。

6. Nullsafe 運算符?RFC

在php7 中:

$country=null;if($session!==null){$user=$session->user;if($user!==null){$address=$user->getAddress();if($address!==null){$country=$address->country;}}}

在php8 中:

$country=$session?->user?->getAddress()?->country;

現(xiàn)在可以用新的 nullsafe 運算符鏈式調(diào)用,而不需要條件檢查 null娜搂。 如果鏈條中的一個元素失敗了迁霎,整個鏈條會中止并認定為 Null。

7. 字符串與數(shù)字的比較更符合邏輯?RFC

在php7 中:

0=='foobar'// true

在php8 中:

0=='foobar'// false

PHP 8 比較數(shù)字字符串(numeric string)時百宇,會按數(shù)字進行比較。 不是數(shù)字字符串時秘豹,將數(shù)字轉(zhuǎn)化為字符串携御,按字符串比較。

8. 內(nèi)部函數(shù)類型錯誤的一致性。?RFC

在php7 中:

strlen([]);// Warning: strlen() expects parameter 1 to be string, array givenarray_chunk([],-1);// Warning: array_chunk(): Size parameter expected to be greater than 0

在php8 中:

strlen([]);// TypeError: strlen(): Argument #1 ($str) must be of type string, array givenarray_chunk([],-1);// ValueError: array_chunk(): Argument #2 ($length) must be greater than 0

現(xiàn)在大多數(shù)內(nèi)部函數(shù)在參數(shù)驗證失敗時拋出 Error 級異常啄刹。

9. 即時編譯

PHP 8 引入了兩個即時編譯引擎涮坐。 Tracing JIT 在兩個中更有潛力,它在綜合基準測試中顯示了三倍的性能誓军, 并在某些長時間運行的程序中顯示了 1.5-2 倍的性能改進袱讹。 典型的應(yīng)用性能則和 PHP 7.4 不相上下。

關(guān)于 JIT 對 PHP 8 性能的貢獻

10. 類型系統(tǒng)與錯誤處理的改進

算術(shù)/位運算符更嚴格的類型檢測?RFC

Abstract trait 方法的驗證?RFC

確保魔術(shù)方法簽名正確?RFC

PHP 引擎 warning 警告的重新分類?RFC

不兼容的方法簽名導(dǎo)致 Fatal 錯誤?RFC

操作符 @ 不再抑制 fatal 錯誤昵时。

私有方法繼承?RFC

Mixed 類型?RFC

Static 返回類型?RFC

內(nèi)部函數(shù)的類型?Email thread

擴展?Curl捷雕、?Gd、?Sockets壹甥、?OpenSSL救巷、?XMLWriter、?XML?以 Opaque 對象替換 resource句柠。

11. 其他語法調(diào)整和改進

允許參數(shù)列表中的末尾逗號?RFC浦译、 閉包 use 列表中的末尾逗號?RFC

無捕獲的 catche?RFC

變量語法的調(diào)整?RFC

Namespace 名稱作為單個 token?RFC

現(xiàn)在 throw 是一個表達式?RFC

允許對象的 ::class?RFC

12. 新的類、接口溯职、函數(shù)

Weak Map?類

Stringable?接口

str_contains()精盅、?str_starts_with()str_ends_with()

fdiv()

get_debug_type()

get_resource_id()

token_get_all()?對象實現(xiàn)

13. 幾個棄用

在 PHP 7. * 的開發(fā)期間谜酒,添加了幾個棄用版本渤弛,這些棄用已于 PHP 8 最終確定。

PHP 7.2?中的棄用

PHP 7.3?中的棄用

PHP 7.4?中的棄用

總結(jié):以上就是這篇文章的全部內(nèi)容了甚带。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末她肯,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子鹰贵,更是在濱河造成了極大的恐慌晴氨,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,914評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件碉输,死亡現(xiàn)場離奇詭異籽前,居然都是意外死亡,警方通過查閱死者的電腦和手機敷钾,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評論 2 383
  • 文/潘曉璐 我一進店門枝哄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人阻荒,你說我怎么就攤上這事挠锥。” “怎么了侨赡?”我有些...
    開封第一講書人閱讀 156,531評論 0 345
  • 文/不壞的土叔 我叫張陵蓖租,是天一觀的道長粱侣。 經(jīng)常有香客問我,道長蓖宦,這世上最難降的妖魔是什么齐婴? 我笑而不...
    開封第一講書人閱讀 56,309評論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮稠茂,結(jié)果婚禮上柠偶,老公的妹妹穿的比我還像新娘。我一直安慰自己睬关,他們只是感情好诱担,可當我...
    茶點故事閱讀 65,381評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著共螺,像睡著了一般该肴。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上藐不,一...
    開封第一講書人閱讀 49,730評論 1 289
  • 那天匀哄,我揣著相機與錄音,去河邊找鬼雏蛮。 笑死涎嚼,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的挑秉。 我是一名探鬼主播法梯,決...
    沈念sama閱讀 38,882評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼犀概!你這毒婦竟也來了立哑?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,643評論 0 266
  • 序言:老撾萬榮一對情侶失蹤姻灶,失蹤者是張志新(化名)和其女友劉穎铛绰,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體产喉,經(jīng)...
    沈念sama閱讀 44,095評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡捂掰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,448評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了曾沈。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片这嚣。...
    茶點故事閱讀 38,566評論 1 339
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖塞俱,靈堂內(nèi)的尸體忽然破棺而出姐帚,到底是詐尸還是另有隱情,我是刑警寧澤敛腌,帶...
    沈念sama閱讀 34,253評論 4 328
  • 正文 年R本政府宣布卧土,位于F島的核電站惫皱,受9級特大地震影響像樊,放射性物質(zhì)發(fā)生泄漏尤莺。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,829評論 3 312
  • 文/蒙蒙 一生棍、第九天 我趴在偏房一處隱蔽的房頂上張望颤霎。 院中可真熱鬧,春花似錦涂滴、人聲如沸友酱。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽缔杉。三九已至,卻和暖如春搁料,著一層夾襖步出監(jiān)牢的瞬間或详,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評論 1 264
  • 我被黑心中介騙來泰國打工郭计, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留霸琴,地道東北人。 一個月前我還...
    沈念sama閱讀 46,248評論 2 360
  • 正文 我出身青樓昭伸,卻偏偏與公主長得像梧乘,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子庐杨,可洞房花燭夜當晚...
    茶點故事閱讀 43,440評論 2 348

推薦閱讀更多精彩內(nèi)容

  • PHP 8.0 是 PHP 語言的一個主版本更新选调。 它包含了很多新功能與優(yōu)化項, 包括命名參數(shù)灵份、聯(lián)合類型仁堪、注解、構(gòu)...
    程序員小喬閱讀 302評論 1 0
  • 1各吨、PHP8如約而至 訪問 PHP官方[https://www.php.net/]枝笨,我們已經(jīng)可以看到php8穩(wěn)定版...
    taobao閱讀 8,388評論 0 4
  • PHP 7.3 版本發(fā)布后,為了更好地理解這門廣泛流行的編程語言的新特性和優(yōu)化之處揭蜒,我決定詳細地研究下 PHP 開...
    八重櫻勿忘閱讀 252評論 0 2
  • 前言 這次横浑,我們將演示如何在PHP擴展中接受傳入的參數(shù)和輸出返回值。 我們將在擴展中實現(xiàn)default_value...
    信海龍閱讀 1,777評論 0 1
  • 久違的晴天屉更,家長會徙融。 家長大會開好到教室時,離放學已經(jīng)沒多少時間了瑰谜。班主任說已經(jīng)安排了三個家長分享經(jīng)驗欺冀。 放學鈴聲...
    飄雪兒5閱讀 7,512評論 16 22