[英]Switch statement handles conditions different than if/else
我創建了一個switch語句來處理三種不同的情況並返回結果。 switch語句總是在第一種情況下觸發,即使它為假。 當我創建一個if / else語句時,它可以按預期工作。 為什么是這樣? (請記住,我沒有同時使用開關和if / else,我只是不評論它們以顯示我的示例)
這是我正在使用的功能:
public static function statuses($statusId = null)
{
$statuses = [
1 => 'Choose Vendor',
2 => 'Approve Quote',
3 => 'Waiting on Forecast',
4 => 'Waiting on Sign Approval',
5 => 'Waiting on Final Approval',
6 => 'Waiting on Review',
7 => 'Completed'
];
// This works as expected...
if (is_numeric($statusId)) {
return $statuses[$statusId];
} elseif (is_string($statusId)) {
return array_search($statusId, $statuses);
} else {
return $statuses;
}
// This does not work as expected
switch ($statusId) {
case is_numeric($statusId):
// This always fires and the result is FALSE
var_dump(is_numeric($statusId));
return $statuses[$statusId];
case is_string($statusId):
return array_search($statusId, $statuses);
default:
return $statuses;
}
}
這是我調用方法的方式:
SignVendorJob::statuses()
因為我沒有傳遞參數,哪個應該返回數組。
switch語句應如下所示:
switch (true) {
case is_numeric($statusId):
// This always fires and the result is FALSE
var_dump(is_numeric($statusId));
return $statuses[$statusId];
case is_string($statusId):
return array_search($statusId, $statuses);
default:
return $statuses;
}
請注意變更后switch
。
在您的示例中,對以下情況進行了測試:
$statusId == is_numeric($statusId)
和$statusId == is_string($statusId)
這些將產生錯誤的結果。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.