2014-11-28 2 views
0

Может кто-нибудь объяснить мне, почему эти коды возвращают «ИСТИНА». Я знаю, что я должен использовать «===» скорее «==», но я бегу к этому коду и задаюсь вопросом, почему он возвращается к истине. Заранее спасибо.PHP: путают с оператором «==»

<?php 
    $s = "final"; 
    $i = 0; 
    if($s == $i){ 
     echo "TRUE"; 
    }else{ 
     echo "FALSE"; 
    } 
+0

функции * возврат * (значение). code * prints * or * echo * es –

+0

Возможный дубликат [Как отличаются отношения равенства PHP (== double equals) и идентичности (=== triple equals)?] (http://stackoverflow.com/questions/ 80646/how-do-the-php-equal-double-equals-and-identity-triple-equals-comp) –

+0

Спасибо, ребята. Я многому научился сегодня :) – reignsly

ответ

1

Посмотрите на PHP comparison tables.

В таблице «Loose comparisons with ==» вы можете видеть, что сравнение числа 0 со строкой, содержащей текст («php» в примере), оценивается как TRUE.

1

Это только свойство loose comparisons, реализованное на PHP. Я бы больше не искал логики, кроме того, что это данность.

5

Когда вы пытаетесь сравнить строку и число, интерпретатор преобразует вашу строку в int, так что вы получили 0 == 0 в финале. Вот почему верно string == 0.

1

Как упоминалось выше, это проблема с свободным сравнением php. Принятый ответ php string comparasion to 0 integer returns true? Объясняет это достаточно хорошо ИМХО. короче «==» пытается бросить вашу строку в междунар, и так как он выходит из строя, в результате INT имеет значение 0

1

От PHP comparison operators:

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

И от PHP string conversion to numbers:

Значение определяется по начальной части строки. Если строка начинается с действительных числовых данных, это будет используемое значение. В противном случае значение будет 0 (ноль).

Так, если сравнить число и строку, PHP пытается преобразовать строку в целое число первых и как «окончательный» не содержит каких-либо действительных числовых данных, она превращается в 0.

Вы можете попробовать:

var_dump(intval('12final'));  //int(12) 
var_dump(floatval('1.2final')); //float(1.2) 

Это из-за обоих 12final и 1.2final начала с действительными числовыми данными (12 и 1.2 respecrively), их преобразованное значение не 0.

Смежные вопросы