PHP中使用switch時的注意事項

2021-10-05 07:41:40 字數 1122 閱讀 9629

switch主要用於根據不同的條件執行不同的動作。

以前完成任務時,有某個小功能模組,大致如下:

有a、b、c、d四種可能性

當為a or b 的時候,執行functiona()方法

當為c時,執行functionb()方法

當為d時,執行functionc()方法

於是我寫下了以下的邏輯判斷:

switch($condition)
後來在執行的過程中,我發現所有的情況,都是進入functiona執行相關操作,當時感到非常的奇怪,查閱了一些資料,明白了其中的原因。

要理解為什麼,首先的理解兩個概念 "鬆散比較"與"嚴格比較"。

通俗來說,鬆散比較也就是php當中的 "==";嚴格比較也就是php當中的 "==="。

如圖所示:

php 的鬆散比較 「==」 在判斷值之前會自動的進行型別轉換,如果想連型別都判斷的話就要用到嚴格比較 「===」;

關鍵點來了,在switch 中 case 的條件值是鬆散比較,並且針對比較值與 case 值,如果說兩者的資料型別不同,會將對應資料 按照鬆散比較的方式轉換成相應的bool值。

$condition = 'demo';

switch ($condition )

最終的結果會輸出123,為什麼輸出的值不是456呢?

實際上在第乙個case中的條件判斷,首先將  'demo1' || 'demo2' 的條件值轉為對應的bool值,對於字串 'demo1' 與 'demo2'進行or運算後,得到了true。然後再根據鬆散比較,判斷"demo" == true 是否為真,很顯然這裡為真。

當然,也有例外,那就是數字型別與字串型別的變數進行比較時,不會轉換成布林值後再進行比較。

$condition = 1;

switch ($info)

這裡依然會輸出456。

switch語句中使用break???

break是跳出迴圈使用的。而在switch語句中使用switch語句是結束switch語句。比如 switch x 如果沒有break語句,且x 1 的情況下輸出的結果是 這是一樓 這是二樓 這是三樓 這是default語句 這裡大家注意,switch語句中的x並不是判斷,而是從這個開始繼續往下執...

delphi中使用override需要注意的地方

在override時,如果override的是procedure,則加上關鍵字inherited 就會執行父類同名procedure的所有過程,然後再執行子類中特有的過程。如果override的是function則不會執行父類中同名function的內容。但是,可以通過下面的方法來執行父類的內容 例...

PHP中使用foreach時加 符號的用法

foreach時加 符號 遍歷的同時改變原陣列即修改資料或者增加資料。arr a b c foreach arr as key value echo json encode arr a111 b111 c111 這裡改變了原來陣列的值使用 可能出現的問題 arr a b c foreach arr ...