簡體   English   中英

switch語句處理的條件不同於if / else

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM