2013-04-12 1 views
1

Я пытаюсь показать результат операции сравнения ($a > $b), который ничего не отображает для приведенного ниже кода, тогда как в операции ($a < $b) отображается результат 1.Результат не отображается, если операция сравнения возвращает false

Мне интересно, почему первая операция не возвращается 0, так как это false?

<?php 
    $a = 1; 
    $b = 5; 
    print ($a > $b); 
    echo "Output"; 
    print ($a < $b); 
?> 

ответ

3

К сожалению, это очень распространенное заблуждение. 0 "is" не false. false - false, boolean. 0 есть 0, a число. 0 не соответствует false в безопасном сравнении.

Когда вы echo или printfalse, его отливают в строку. false литой в строку "", пустая строка. true литой в строку "1", строка «1».

Прочитано http://php.net/manual/en/language.types.string.php#language.types.string.casting.

+0

PHP не имеет объективного стандарта истины - он играет жестко и быстро с истиной. По правде говоря, истина относительна. «Истинные и ложные - все, что я хочу». – Patashu

+0

@Patashu Это bullcr * p. PHP отлично определил [таблицы истинности] (http://www.php.net/manual/en/types.comparisons.php), вам просто нужно их изучить. PHP не случайный. Это сводится к следующим вещам: * falsey *: 'false',' 0', ''0'',' ''', 'null',' array() '. Все остальное - правдиво *. – deceze

+0

@Patashu Этот комментарий также не имеет ничего общего с обсуждаемой темой: * type juggling *. – deceze

0

сравнение Целое число ($ а $ < б) имеет тип возвращаемого булево, который может быть истинным или ложным.
печати работает таким образом, что он печатает «1» для истинного и ничего для ложной.

0

Это связано с тем, как PHP обрабатывает ложные значения.

echo ($a > $b) также не будет выводить ничего.

Чтобы ваш оператор вывода 0 для ложного условия вам нужно бросить в целое число:

print (int)($a > $b); 
Смежные вопросы