0
var_dump((int) true); // returns 1
var_dump(true > 0);  // returns true
var_dump(true > - 1); // returns false
var_dump(1 > - 1); // returns true

上記の2つの結果がブール値と整数を比較していて混乱しているため、誰かが詳しく説明してくれませんか。

4

3 に答える 3

3

OPが質問を変更したため、この回答は質問を満たさなくなりました。


通常、異なるタイプのオペランドを比較するべきではありません。これを行うコードがある場合、おそらく間違いがあります。結果はあまり意味がないかもしれません。

答えを知りたい場合は、試してみてください。

var_dump(true > 0); // gives true
var_dump(true > -1); // gives false
于 2013-01-09T17:31:44.660 に答える
3

>は数値比較演算子であるため、PHP は「緩やかな比較」trueを行い、それぞれの場合に 1 または -1 に変換します。

内部で次のことが起こっていると思います。

if を尋ねると(true > 0)、PHP はまず大まかに if をテストtrue==0し、false を返し、次に を 1 に置き換えtrueて比較すると true が返されます。

if を尋ねると(true > -1)、PHP はまず大まかに if をテストtrue==-1し、true を返します。これ(true > -1)は、false でなければならないことを意味します。

要するに、このようなことをしないでください。

于 2013-01-09T17:31:57.317 に答える
1

Blazemonger が書いたことを考慮して、ここで何が起こっているのかを理解しました。このことを考慮:

var_dump(true == 0); // returns false
var_dump(true == 1); // true
var_dump(true == -1); // true
var_dump(true == -2); // true

したがって、真は何でもゼロです。

> 演算子の場合、PHP は最初に等号 (==) をテストするため、true == X は X = 0 を除いて常に true です。比較の結果が true の場合、それより大きくなることはありません。したがって、true > X は例外を除いて常に false です。 X = 0 の場合。

したがって:

var_dump(true > 0); // true
var_dump(true > 1); // false
var_dump(true > -1); // false
var_dump(true > -2); // false
于 2013-01-09T17:48:11.053 に答える