1

誰かが、自然なものすべてを愛するために、なぜこれが起こっているのか説明できますか?

$code = 0;
echo $code == 'item_low_stock' ? 'equal' : 'not equal';

// RESULT: "equal"  

???

私のアプリのコード行が突然正しく機能しなくなりました。その周りのコードは何も編集しておらず、PHPのバージョンも変更していません。$ code変数に0が含まれている場合、文字列'item_low_stock'と比較するとtrueとして渡されます。

元のコードブロックを投稿することはできますが、この比較に要約すると、これが私が見つけたものです。

停止します。

編集:PHPのバージョンは5.3.10です。

4

2 に答える 2

4

ドキュメントは、の両側の2つの値が型ジャグリング後==にテストされることを明確にしています。整数にキャストすると、文字列はになります。次のことを試してください。0

echo (int) 'item_low_stock'; // 0

実行する:http ://codepad.org/z7LIEumk

型ジャグリングを行いたくない場合は、===または!==代わりにを使用してください。これは、2つの値が*同一*であるかどうか、つまり同じ値とタイプであるかどうかをテストします。

于 2012-12-04T03:05:05.137 に答える
2

オペランドの1つが数値の場合、phpは別のオペランドも数値にキャストします。

したがってitem_low_stock、数値にキャストされた文字列は0、に等しく0、したがって、true

http://php.net/manual/en/language.operators.comparison.php

数値を文字列と比較する場合、または比較に数値文字列が含まれる場合、各文字列は数値に変換され、比較は数値的に実行されます。

于 2012-12-04T03:02:12.933 に答える