PHP8新特性之match表示式

2022-07-01 05:09:13 字數 1218 閱讀 3937

php8 alpha2發布了,最近引入了乙個新的關鍵字:match, 這個關鍵字的作用跟switch有點類似。

雖然我一般對語法糖無感,但這個我覺得還是有點意思,match這個詞也挺好看,那麼它是幹啥的呢?

在以前我們可能會經常使用switch做值轉換類的工作,類似:

switch

($input)

(當然,有的同學會說,誰會這麼寫,用個陣列轉換不行麼? 拜託,這是舉例啊,陣列也只能數字鍵和整數啊,萬一key是需要其他表示式呢,萬一你要多個key對應乙個值呢,對吧?)

那麼如果使用match關鍵字呢,可以變成類似:

$result =match($input) ;

相比switch, match會直接返回值,可以直接賦值給$result了。

並且,類似switch的多個case乙個block一樣,match的多個條件也可以寫在一起,比如:

$result =match($input) ;

需要注意的和switch不太一樣的是,以前我們用switch可能會經常遇到這種詭異的問題:

$input = "

2 person";

switch

($input)

你會發現,bad竟然被輸出了,這是因為switch使用了寬鬆比較(==)。match就不會有這個問題了, 它使用的是嚴格比較(===),就是值和型別都要完全相等。

還有就是,當input並不能被match中的所有條件滿足的時候,match會丟擲乙個unhandledmatcherror exception:

$input = "

false";

$result =match($input) ;

會得到:

fatal error: uncaught unhandledmatcherror: unhandled match value of type string

這樣就不用擔心萬一match條件沒寫全導致了不可預知的錯誤。

另外還是要說明,match是關鍵字,也就是從php8開始它不能出現在namespace或者類名中,如果你的專案中有用match作為類名的:

class match {}

在php8開始將會得到語法錯誤了, 當然,方法名中還是可以用的。

詳細的,可以參考rfc:match expression

php8強型別,PHP8新特性盤點

php 8.0.0 已經正式發布了,這個對於phper無疑是乙個令人振奮的訊息。它包含了很多新功能與優化項,包括命名引數 聯合型別 註解 構造器屬性提公升 match 表示式 nullsafe 運算子 jit 並改進了型別系統 錯誤處理 語法一致性。最人性化的特性 命名引數 聯合型別 mixed 型...

php8強型別,PHP8新特性盤點

php 8.0.0 已經正式發布了,這個對於phper無疑是乙個令人振奮的訊息。它包含了很多新功能與優化項,包括命名引數 聯合型別 註解 構造器屬性提公升 match表示式 nullsafe運算子 jit,並改進了型別系統 錯誤處理 語法一致性。最人性化的特性 命名引數 聯合型別 mixed型別 這...

java8新特性之lambda表示式

lambda表示式需要支援函式式介面 介面中只有乙個抽象方法的介面 可以用 functionalinte ce註解修飾介面,這樣如果定義超過乙個抽象方法就會報錯 幾種格式 格式一 無引數,無返回值 system.out.println hello 格式二 有乙個引數,無返回值 x system.ou...