PHP странное поведение с регистром переключателя и строкой '-0' - PullRequest
0 голосов
/ 05 декабря 2018

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

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

1 Ответ

0 голосов
/ 05 декабря 2018

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

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

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

...