PHP の落とし穴シリーズ。
(ちなみに PHP のバージョンは 5.5.9 です)
PHP の論理演算子の論理積と論理積には "&&"、"and"、"||"、"or" がありますが、 && は、and の別名や古い記法ではありません。 演算の優先順位が異なっている別の演算子なのです。
次のような 2つの処理では、結果が変わることがあります。
# 1 $result = func1() && func2();
# 2 $result = func1() and func2();
and は代入演算子より優先順位が低いため 以下のように解釈されます。
# 1' $result = (func1() && func2());
# 2' ($result = func1()) and func2();
関数 func1() が true を返し、 関数 func2() が false を返す場合 変数 $result には #1 は、false が格納されますが #2 は、true が格納されます。
|| と or の関係も同じです。
ちゃんとカッコで囲んでおけば大丈夫ですが、 とりあえずは && と || を使うようにしておけば良いのかなと思います。