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つの結果がブール値と整数を比較していて混乱しているため、誰かが詳しく説明してくれませんか。
OPが質問を変更したため、この回答は質問を満たさなくなりました。
通常、異なるタイプのオペランドを比較するべきではありません。これを行うコードがある場合、おそらく間違いがあります。結果はあまり意味がないかもしれません。
答えを知りたい場合は、試してみてください。
var_dump(true > 0); // gives true
var_dump(true > -1); // gives false
>
は数値比較演算子であるため、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 でなければならないことを意味します。
要するに、このようなことをしないでください。
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