Подтвердить что ты не робот

Ошибка пустого значения php в инструкции switch

У меня есть следующий PHP-код, который дает мне неожиданный результат:

$foo = NULL;

switch($foo)
{
    case 0:
        print "What?!";
}

Я ожидаю, что результат будет ничем, но он соответствует случаю 0. В справочнике php указано, что NULL является не значением, поэтому как он может равняться 0?

4b9b3361

Ответ 1

В заявлении switch применяется свободное сравнение, что означает, что следующие вещи рассматриваются как эквивалентные 0:

false
0
"0"
NULL
"any string"
""

Ответ 2

beacuse php не строгий строгий язык

$foo = NULL;

if( isset( $foo ) ) {
    switch( $foo ) {
        case 0:
            print "WTF!!!";
    }
}

Ответ 3

PHP делает принудительное, слабое сравнение. Вам нужно будет сделать это вместо:

$foo = NULL;
if ($foo === 0)
    print "WTF!!!";

Ответ 4

Я предполагаю здесь, но может случиться так, что оператор switch обеспечивает значение $foo по сравнению с 0. Чтобы проверить эту гипотезу, почему бы вам не попробовать добавить это выше оператора switch:

echo $foo == NULL;

Это должно повторить 1 до проклятия, если я прав...

Ответ 5

Проверьте manual перед тем, как задать вопрос.

Примечание:

Обратите внимание, что switch/case делает свободное сравнение.