PHPにおけるorと||の違い
PHPでプログラミングをする時に,エラー処理を行いたい関数(ここではfooとする)がある場合,
<?php $hoge = foo() or die('error'); ?>
のように書くことが多いが,これを
<?php $hoge = foo() || die('error'); ?>
と書くと,期待通りに動作しないことがある.
http://php.benscom.com/manual/ja/language.operators.logical.phpに書いてある例を挙げると,
<?php // "||" の優先順位は "or" より高くなります $e = false || true; // $e に代入されるのは、(false || true) の評価結果、つまり true です $f = false or true; // $f には false が代入されます ?>
となっている.
さらに, を参考にすると,=よりも||の方が優先順位が高く,=よりもorの方が優先順位が低くなっている.つまり,
<?php $hoge = foo() || die('error'); ?>
の例では,foo() || die('error')を先に評価しており,foo()が真の時は評価値がtrueになり,$hogeにはfoo()の返り値ではなくtrueが代入されることになる.
一方,
<?php $hoge = foo() or die('error'); ?>
の場合は先に=演算子が適用されるので,$hogeにfoo()の結果がちゃんと格納される.$hogeにfoo()の結果を格納後に比較することになる.
orと||は別物だと思っておいたほうがいいのかも.