PHPのif文の条件式での代入ではまった件
if($foo = false)
この様に、if文の条件式で代入する事ができます。
通常、代入されてから条件式が評価されるはずです。
$foo
にfalse
が代入されているので、この場合は条件式もfalse
です。
if($foo = false || true)
はまったのは、このケースです。
$foo = false
は同じですが、論理和でtrue
があるので、この条件式は常にtrue
となります。
これはいいんですが、問題は$foo
の中身です。
$foo
にfalse
が入っていると思いきやtrue
が入っています。
if($foo = (false || true))
実は、演算子の優先順位を勘違いしていて、この様に||
が先に評価されるのが原因でした。
if($foo = false OR true)
ちなみに、||
は=
よりも優先されますが、OR
は=
よりも順位が下です。
なので、この場合は、意図おどおりに条件式はtrue
で$foo
にはfalse
が入ります。
確認用スニペット
<?php $foo = true; if($foo = false) var_dump(1,$foo); var_dump(2,$foo); $foo = true; if($foo = false || true) var_dump(3,$foo); var_dump(4,$foo); $foo = true; if(($foo = false) || true) var_dump(5,$foo); var_dump(6,$foo); $foo = true; if($foo = false OR true) var_dump(7,$foo); var_dump(8,$foo); ?> <hr> <?php show_source(__FILE__); ?>
int(2) bool(false) int(3) bool(true) int(4) bool(true) int(5) bool(false) int(6) bool(false) int(7) bool(false) int(8) bool(false)