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)