Почему значение равно строке в php - PullRequest
0 голосов
/ 10 марта 2011

Вот так:

$arr_val = array(0,1,'0','1');
foreach ($arr_val as $key){
    echo ($key == "TEST")?"EQUALLED":"NOT EQUALLED"."<br>";
}
  1. 0 == "TEST" отпечатки "РАВНО"
  2. 1 == "TEST" печать "НЕ РАВНО"
  3. '0' =="TEST" печатает «НЕ РАВНО»
  4. '1' =="TEST" печатает "НЕ РАВНО"

Когда я говорю, печатается значение «ВЫБРАН». Но почему вышеупомянутые отпечатки первого случая равны. Любые идеи по этому поводу, пожалуйста? Как бы это было равно. Мы знаем, как сделать сравнение с (===) operator. Но я пытаюсь узнать причину, по которой (0=="TEST") является правдой.

Ответы [ 2 ]

7 голосов
/ 10 марта 2011

Когда вы предоставляете оператору PHP == смесь числовых и строковых операндов, PHP будет пытаться преобразовать строку в соответствующий числовой тип, что является частью процесса, который он называет " type juggling ". В этом случае строка "TEST" преобразуется в целое число 0, поэтому ваш тест эквивалентен 0 == 0, что является истинным.

PHP предоставляет оператор === для проверки, равны ли значения и тип обоих операндов. Таким образом, в то время как 0 == "TEST" будет преобразовываться в true, 0 === "TEST" не будет и не будет 0 === "0" или 0 === 0.0.

Обратите внимание, что когда PHP преобразует строку в число, он пытается проанализировать строку на предмет допустимого числа. См. intval для получения дополнительной информации о том, как это происходит. Если бы вы написали 0 == "1TEST", выражение изменилось бы на 0 == 1 или false.

Во втором примере, 1 == "TEST", строка "TEST" снова преобразуется в целое число, в результате чего получается 1 == 0, что неверно.

В последних двух примерах используются сравнения строк. Там нет конверсии, и результаты говорят сами за себя.

PHP предоставляет подробный анализ того, как переменные различного типа сравниваются на равенство.

2 голосов
/ 10 марта 2011

Поскольку 0 - это целое число, за кадром происходит сравнение:

0 == intval( "TEST" )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...