演算子の優先順位のはなし(&&と=の場合)
大した事でも無いのですけど
PHPで
if($str_foo = hoge() && $str_bar = huga() && $str_baz = piyo())
と条件式の中で代入してみたら$baz以外が全て空文字列になってしまいました。
あれれ、と思って優先順位を調べてみると、代入より&&のほうが優先順位が高いのでした。
http://php.net/manual/ja/language.operators.precedence.php
なので、
かっこでくくっちゃうか、
if( ($str_foo = hoge()) && ($str_bar = huga()) && ($str_baz = piyo()) )
代入より優先順位の低いandを使って
if($str_foo = hoge() and $str_bar = huga() and $str_baz = piyo())
と書くと大丈夫です。
最初の結果は変数の$str_○○が全部未定義だったので、
hoge() && $str_bar //FALSE
が先に評価されて$str_fooに代入される。次に、
huga() && $str_baz //FALSE
が評価されて$str_barに代入される。
最後に、$str_bazにpiyo()が代入される。
というからくりだったようです。
hoge() && $str_bar
を評価した後に
$str_bar = (huga() && $str_baz)
が評価されるなんて、四則計算に慣れてると$str_barが2回計算されてるみたいでちょっと奇妙ですけどね。
余談ですが、この記事書くために調べ物してたどり着いたものが面白かったので。
普段はあんまり意識しませんが、a✕bよりabが優先順位高いのです。