sineverba
sineverba

Reputation: 5172

PHP: issue with switch statement (wrong return)

I have this method:

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;
}

The $status parameter, when is the string "On" (with O letter capitalize), return 0 (zero).

Of course, I need return as 1.

Thank you

Upvotes: 1

Views: 53

Answers (1)

Nigel Ren
Nigel Ren

Reputation: 57121

As you had numeric 0 and 1 in the options of the switch it was using a numeric comparison - "on" to a number is 0 and so it matched against 0.

As you have the parameter as type string a number would be converted to a string, so remove the numeric comparisons...

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");

Although you could reduce the function to...

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

Upvotes: 6

Related Questions