テストコード
// "||"の戻り値チェック(true編)
$a_true_l = true || 'a_true_l';
echo 'a_true_l: '.var_export($a_true_l, TRUE)."\n";
$a_true_r = 'a_true_r' || true;
echo 'a_true_r: '.var_export($a_true_r, TRUE)."\n";
// "||"の戻り値チェック(false編)
$a_false_l = false || 'a_false_l';
echo 'a_false_l: '.var_export($a_false_l, TRUE)."\n";
$a_false_r = 'a_false_r' || false;
echo 'a_false_r: '.var_export($a_false_r, TRUE)."\n";
echo "\n";
// "||"の実行チェック(true編)
true || $a_true_l_void = 'a_true_l_void';
echo 'a_true_l_void: '.var_export($a_true_l_void, TRUE)."\n";
$a_true_r_void = 'a_true_r_void' || true;
echo 'a_true_r_void: '.var_export($a_true_r_void, TRUE)."\n";
// "||"の実行チェック(false編)
false || $a_false_l_void = 'a_false_l_void';
echo 'a_false_l_void: '.var_export($a_false_l_void, TRUE)."\n";
$a_false_r_void = 'a_false_r_void' || false;
echo 'a_false_r_void: '.var_export($a_false_r_void, TRUE)."\n";
echo "\n";
// "or"の戻り値チェック(true編)
$b_true_l = true or 'b_true_l';
echo 'b_true_l: '.var_export($b_true_l, TRUE)."\n";
$b_true_r = 'b_true_r' or true;
echo 'b_true_r: '.var_export($b_true_r, TRUE)."\n";
// "or"の戻り値チェック(false編)
$b_false_l = false or 'b_false_l';
echo 'b_false_l: '.var_export($b_false_l, TRUE)."\n";
$b_false_r = 'b_false_r' or false;
echo 'b_false_r: '.var_export($b_false_r, TRUE)."\n";
echo "\n";
// "or"の実行チェック(true編)
true or $b_true_l_void = 'b_true';
echo 'b_true_l_void: '.var_export($b_true_l_void, TRUE)."\n";
$b_true_r_void = 'b_true_r_void' or true ;
echo 'b_true_r_void: '.var_export($b_true_r_void, TRUE)."\n";
// "or"の実行チェック(false編)
false or $b_false_l_void = 'b_false_l_void';
echo 'b_false_l_void: '.var_export($b_false_l_void, TRUE)."\n";
$b_false_r_void = 'b_false_r_void' or false;
echo 'b_false_r_void: '.var_export($b_false_r_void, TRUE)."\n";
実行結果
a_true_l: true
a_true_r: true
a_false_l: true
a_false_r: true
a_true_l_void: NULL
a_true_r_void: true
a_false_l_void: 'a_false_l_void'
a_false_r_void: true
b_true_l: true
b_true_r: 'b_true_r'
b_false_l: false
b_false_r: 'b_false_r'
b_true_l_void: NULL
b_true_r_void: 'b_true_r_void'
b_false_l_void: 'b_false_l_void'
b_false_r_void: 'b_false_r_void'
結論
-
||
は、- 両辺にて何かしらのtrueに該当するものがある場合、trueを返す
-
=
よりも優先される
-
or
は、trueに該当するものが見つかった場合、それを返す- 左辺を返す
-
=
が優先される
(※なお、下記はいずれの場合も同じ挙動。
* 左辺がtrueだった場合、右辺を実行しない。
* 左辺がfalseだった場合、右辺を実行する
)
補足
- 間違えていたら指摘してください。