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と||は別物だと思っておいたほうがいいのかも.