Недавно я столкнулся с очень странным поведением в случае переключателя PHP при работе со строкой '-0'
,
/*
The code below echos:
'How did that happen? "0" and "0" are two different strings.'
*/
$myString = '-0';
switch($myString) {
case '0':
echo 'How did that happen? "-0" and "0" are two different strings.';
break;
case '-0':
echo 'This is normal.';
break;
}
Как ни странно, оператор switch выше выполняет регистр ‘0’.
Возвращаясь к приведенному выше коду, кажется, что если вы измените порядок дел и место дела '-0'
перед делом '0'
, кажется, работает нормально и выполнить case ‘-0’, как и должно.
Это почему? Есть ли причины этого странного поведения?
При написании этого вопроса я узнал, что PHP НЕ использует
строгое равенство для проверки случаев переключения (в отличие от других скриптов
такие языки, как JavaScript).
Следовательно, case '0'
выполняется, если '0' == '-0'
и, поскольку это так, запускается вместо этого (потому что сначала проверяется для этого случая).
Если case '-0'
был помещен первым, он проверяет это первым, поэтому выполняет этот случай, и так как оба случая действительны / TRUE
, он запускает первый случай в операторе switch.
Других решений пока нет …