Ответ 1
В заявлении switch
применяется свободное сравнение, что означает, что следующие вещи рассматриваются как эквивалентные 0:
false
0
"0"
NULL
"any string"
""
У меня есть следующий PHP-код, который дает мне неожиданный результат:
$foo = NULL;
switch($foo)
{
case 0:
print "What?!";
}
Я ожидаю, что результат будет ничем, но он соответствует случаю 0. В справочнике php указано, что NULL является не значением, поэтому как он может равняться 0?
В заявлении switch
применяется свободное сравнение, что означает, что следующие вещи рассматриваются как эквивалентные 0:
false
0
"0"
NULL
"any string"
""
beacuse php не строгий строгий язык
$foo = NULL;
if( isset( $foo ) ) {
switch( $foo ) {
case 0:
print "WTF!!!";
}
}
PHP делает принудительное, слабое сравнение. Вам нужно будет сделать это вместо:
$foo = NULL;
if ($foo === 0)
print "WTF!!!";
Я предполагаю здесь, но может случиться так, что оператор switch
обеспечивает значение $foo
по сравнению с 0
. Чтобы проверить эту гипотезу, почему бы вам не попробовать добавить это выше оператора switch:
echo $foo == NULL;
Это должно повторить 1 до проклятия, если я прав...
Проверьте manual перед тем, как задать вопрос.
Примечание:
Обратите внимание, что switch/case делает свободное сравнение.