PHPのif文の条件式での代入ではまった件

if($foo = false)

この様に、if文の条件式で代入する事ができます。
通常、代入されてから条件式が評価されるはずです。
$foofalseが代入されているので、この場合は条件式もfalseです。

if($foo = false || true)

はまったのは、このケースです。
$foo = falseは同じですが、論理和trueがあるので、この条件式は常にtrueとなります。
これはいいんですが、問題は$fooの中身です。
$foofalseが入っていると思いきやtrueが入っています。

if($foo = (false || true))

実は、演算子の優先順位を勘違いしていて、この様に||が先に評価されるのが原因でした。

PHP: 演算子の優先順位 - Manual

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)