PHP - когда ноль равен "а" [дубликат]


На этот вопрос уже есть ответ здесь:

Недавно у меня была ошибка, которая ставила меня в тупик.... проследил ее до следующего (упрощенного) утверждения, в котором приведен реальный пример

function test_it($team)
{  echo (($team=="a") ? "Yep it is!" : "No Way");
}

Итак, если я выполню test_it(0);, я получу результат "Да, это так!" ??

Логика утверждения выглядит нормально, но, очевидно, чтобы получить правильный результат, мне нужно было сделать это "==="....

Может ли кто-нибудь объяснить, почему это так? Просто чтобы помочь мне понять, почему/чего мне следует избегать в будущем.

Author: Tony Carbone, 2013-06-27

5 answers

Это потому, что жонглирование типами превратит ваш "a" в целое число для сравнения. Так что, по сути, это то, что работает:

if (0 == (int)"a") 

И, конечно, (int)"a" будет оцениваться как 0, вы можете прочитать больше о жонглировании типами здесь.

 2
Author: complex857, 2013-06-27 08:18:49

Это из-за строки/символа a, т.е. "a" и проходящего через 0.

Оператор === выполняет "типобезопасное сравнение"

Объяснение и вопрос здесь

 3
Author: Pogrindis, 2017-05-23 11:50:11

Проверьте эту ссылку .

С помощью == вы выполняете свободное сравнение. Согласно таблице в ссылке, этот тип сравнения между 0 (целое число) и "something" (строка) приведет к TRUE.

 0
Author: maialithar, 2013-06-27 08:20:25

Оператор == просто проверяет, равны ли левое и правое значения. Но оператор === (обратите внимание на дополнительное "=") фактически проверяет, равны ли левое и правое значения, а также проверяет, имеют ли они один и тот же тип переменной (например, являются ли они оба логическими, int и т. Д.)

Теперь сделайте echo (int)"a";, вы получите 0, и это допустимо для любой строки.

 0
Author: Imane Fateh, 2013-06-27 08:25:31

В PHP любая строка, не начинающаяся с числовых значений, равна == 0. Например, вот образец с различными сравнениями, и в результате echo:

$team = 0;
echo (($team=="a") ? "Yep it is!" : "No Way");    // Yep it is!
echo (($team=="abc") ? "Yep it is!" : "No Way");  // Yep it is!
echo (($team=="a really long string") ? "Yep it is!" : "No Way");  // Yep it is!

По-видимому, на самом деле это не ошибка, подробнее об этом читайте здесь> https://bugs.php.net/bug.php?id=44999.

 0
Author: BenM, 2013-06-27 08:54:02