PHP: проблема с оператором switch (неправильный возврат) - PullRequest
0 голосов
/ 24 января 2019

У меня есть этот метод:

private function convertStatusStringToIntZeroOrOne(string $status)
{

    $status = strtolower($status);

    switch ($status) {

        case "off":
        case "0":
        case 0:
            $int_status = 0;
            break;

        case "on":
        case "1":
        case 1:
            $int_status = 1;
            break;

        default:
            $int_status = 1;
            break;


    }

    return $int_status;
}

Параметр $status, когда строка «Вкл» (с заглавной буквой O), возвращает 0 (ноль).

OfКонечно, мне нужно вернуть как 1.

Спасибо

1 Ответ

0 голосов
/ 24 января 2019

Так как у вас были числовые 0 и 1 в опциях switch, он использовал числовое сравнение - «вкл» к числу равно 0, и поэтому оно совпало с 0.

Поскольку у вас есть параметр типа string, число будет преобразовано в строку, поэтому удалите числовые сравнения ...

function convertStatusStringToIntZeroOrOne(string $status)
{
    $status = strtolower($status);

    switch ($status) {
        case "off":
        case "0":
            $int_status = 0;
            break;
        case "on":
        case "1":
            $int_status = 1;
            break;
        default:
            $int_status = 1;
            break;
    }

    return $int_status;
}
echo convertStatusStringToIntZeroOrOne("On");

Хотя вы могли бы уменьшить функцию до ...

function convertStatusStringToIntZeroOrOne(string $status)
{
    $status = strtolower($status);
    return ($status == "off" || $status == 0)?0:1;
}
...