LoginSignup
26
21

More than 5 years have passed since last update.

phpにおける、|| と or の違い

Posted at

テストコード

// "||"の戻り値チェック(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だった場合、右辺を実行する

補足

  • 間違えていたら指摘してください。
26
21
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
26
21