($a > $b)
以下のコードでは何も表示されない比較操作の結果を表示しようとしていますが、操作($a < $b)
は結果を表示します1
。
なぜ最初の操作がそのまま返っ0
てこないのか不思議false
です。
<?php
$a = 1;
$b = 5;
print ($a > $b);
echo "Output";
print ($a < $b);
?>
($a > $b)
以下のコードでは何も表示されない比較操作の結果を表示しようとしていますが、操作($a < $b)
は結果を表示します1
。
なぜ最初の操作がそのまま返っ0
てこないのか不思議false
です。
<?php
$a = 1;
$b = 5;
print ($a > $b);
echo "Output";
print ($a < $b);
?>
残念ながら、それは非常に一般的な誤解です。0
「ではない」false
。false
はfalse
ブール値です。0
は0
、数字です。タイプセーフでない比較では0
大まかに等しい。false
echo
またはの場合print
false
、文字列にキャストされています。false
文字列へのキャストは""
空文字列です。true
文字列へのキャストは"1"
、文字列 "1" です。
http://php.net/manual/en/language.types.string.php#language.types.string.castingを読んでください。
これは、PHP が false 値を処理する方法が原因です。
echo ($a > $b)
また、何も出力しません。
false 条件に対してステートメントの出力を 0 にするには、整数にキャストする必要があります。
print (int)($a > $b);
整数比較 ($a < $b) の戻り値の型はbooleanで、trueまたはfalseになります。
printは、 true の場合は "1" を出力し、 falseの場合は何も出力しないように機能します。