以下のコードの出力は「失敗」ですが、合格1 to $b as $b=1
すると「合格」として出力されます。条件が 0 にのみ当てはまる場合、これがなぜなのか誰にも教えてもらえますか?
<?php
$a="abcd";
$b=0;
if($a == $b)
{
echo "fail";
}
else
{
echo "pass";
}
?>
以下のコードの出力は「失敗」ですが、合格1 to $b as $b=1
すると「合格」として出力されます。条件が 0 にのみ当てはまる場合、これがなぜなのか誰にも教えてもらえますか?
<?php
$a="abcd";
$b=0;
if($a == $b)
{
echo "fail";
}
else
{
echo "pass";
}
?>
異なるタイプの 2 つの変数を比較しているため、2 つのうちの 1 つが変換されます。この場合、文字列は整数に変換され、数値で始まらない文字列の場合は 0 になります。
"abc" == 0
PHP で型チェックを追加するには、"abc" === 0
あなたはタイプジャグリングの犠牲者です。同一の比較演算子,を使用してみてください===
。これは、変数の型が同じであることも確認します。
var_dump('abcd' === 0); // bool(false)
PHPマニュアルから:
数値を文字列と比較する場合、または比較に数値文字列が含まれる場合、各文字列は数値に変換され、数値として比較が実行されます。比較が === または !== の場合、値だけでなく型も比較するため、型変換は行われません。
if($a==$b) {
echo "fail";
}
else {
echo "pass";
}
これは出力されますfail
。
ただし、同一の比較演算子を使用すると===
、型変換は行われません。
if($a===$b) {
echo "fail";
}
else {
echo "pass";
}
これでパスが出力されます。
詳細については、PHP マニュアルの型ジャグリングに関するドキュメントを参照してください。