3

整数/文字列変数があります。mysqli ステートメントにエラーがある場合、それはStringになり、エラーがなければ、影響を受ける行数( Integer ) になります。

しかし、PHP で次のようなものがあるとします。

$i = 0;
if ( $i < 0 || $i == null ) {
    var_dump($i);
}

次の結果が得られました。

int 0

まず、なぜこれが起こるのか知りたいですか?(つまり、 if var_dumpisの場合、 ifステートメントが機能しないint 0のはなぜですか?)

次に、比較のためのソリューションが必要です。

4

6 に答える 6

4

あなたは厳密な比較をしていません。===の代わりに使用し==ます。

==型を変換してから比較します

代わりに以下のいずれかを使用してください。is_null最もクリーンな IMO です。

if ( $i < 0 || $i === null ) {..}

また

if ( $i < 0 || is_null($i)) {..}
于 2013-02-01T21:26:42.933 に答える
3

ドキュメントによると同じである、等しい、同一0 == nullでない場合を比較しています:

次のものは空と見なされます。

"" (空の文字列)
0 (整数としての 0)
0.0 (浮動小数点として 0)
"0" (文字列としての 0)
ヌル
間違い
array() (空の配列)
$var; (変数は宣言されていますが、値はありません)
于 2013-02-01T21:26:23.370 に答える
2

を使っているからです==。そして、1 つのオペランドが - である限りnull、別のオペランドは暗黙的にブール値にキャストされ0ます ->false

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

bool または null 何でも bool に変換、FALSE < TRUE

于 2013-02-01T21:26:16.273 に答える
2

タイプを比較する必要があります

var_dump($i == null); //true
var_dump($i === null); //false

使用できます

$i = 0;
if ( $i < 0 || $i === null ) {
    var_dump($i);
}
于 2013-02-01T21:26:51.050 に答える
1

=== コンパレータを使用する

if ( $i < 0 || $i === null ) { var_dump($i); }

于 2013-02-01T21:28:00.160 に答える
1

機能を使用してくださいis_null()

if ( $i < 0 || is_null($i) ) {
于 2013-02-01T21:29:18.097 に答える