PHP странное поведение с переключателем и строкой ‘-0’

Недавно я столкнулся с очень странным поведением в случае переключателя 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’, как и должно.

Это почему? Есть ли причины этого странного поведения?

2

Решение

При написании этого вопроса я узнал, что PHP НЕ использует
строгое равенство для проверки случаев переключения
(в отличие от других скриптов
такие языки, как JavaScript).

Следовательно, case '0' выполняется, если '0' == '-0'и, поскольку это так, запускается вместо этого (потому что сначала проверяется для этого случая).

Если case '-0' был помещен первым, он проверяет это первым, поэтому выполняет этот случай, и так как оба случая действительны / TRUE, он запускает первый случай в операторе switch.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]