OR
の場合、||
を使用したほうがor
よりも優れていた(またはその逆)論理演算子に関してしばらく読んだことを覚えています。
プロジェクトに戻ってきたときにこれを使用しなければなりませんでしたが、どの演算子が推奨されたのか、それが本当だったのか覚えていません。
どちらが良いですか?
「より良い」ものはありませんが、より一般的なものは||
です。異なる precedence があり、||
は通常のように機能します。
参照: 論理演算子 (そこから次の例を取ります ):
// The result of the expression (false || true) is assigned to $e
// Acts like: ($e = (false || true))
$e = false || true;
// The constant false is assigned to $f and then true is ignored
// Acts like: (($f = false) or true)
$f = false or true;
それらはさまざまな目的に使用され、実際には演算子の優先順位が異なります。 &&
および||
演算子はブール条件を対象としていますが、and
およびor
は制御フローを対象としています。
たとえば、次はブール条件です。
if ($foo == $bar && $baz != $quxx) {
これは制御フローとは異なります。
doSomething() or die();
それぞれの違い|| and OR and && and AND is operator precedence :
$bool = FALSE || TRUE;
($bool = (FALSE || TRUE))
と解釈されます$bool
の値はTRUE
です$bool = FALSE OR TRUE;
(($bool = FALSE) OR TRUE)
と解釈されます$bool
の値はFALSE
です$bool = TRUE && FALSE;
($bool = (TRUE && FALSE))
と解釈されます$bool
の値はFALSE
です$bool = TRUE AND FALSE;
(($bool = TRUE) AND FALSE)
と解釈されます$bool
の値はTRUE
です論理演算子を使用するためのサンプルコードを次に示します。
<html>
<head>
<title>Logical</title>
</head>
<body>
<?php
$a=10;
$b=20;
if($a>$b)
{
echo " A is Greater";
}
elseif($a<$b)
{
echo " A is lesser";
}
else
{
echo "A and B are equal";
}
?>
<?php
$c=30;
$d=40;
//if(($a<$c)AND($b<$d))
if(($a<$c)&&($b<$d))
{
echo "A and B are larger";
}
if(isset($d))
$d=100;
echo $d;
unset($d);
?>
<?php
$var1=2;
switch($var1)
{
case 1:echo "var1 is 1";
break;
case 2:echo "var1 is 2";
break;
case 3:echo "var1 is 3";
break;
default:echo "var1 is unknown";
}
?>
</body>
</html>
私はそれが古いトピックであることを知っていますが、それでもです。私は職場でデバッグしているコードで問題に遭遇したばかりで、おそらく誰かが同様の問題を抱えている可能性があります...
コードは次のように見えるとしましょう:
$positions = $this->positions() || [];
(javascriptなどに慣れているように)$ this-> positions()がfalseまたはnullを返す場合、$ positionsは空の配列になると予想されます。しかし、そうではありません。値は、$ this-> positions()が返すものに応じてTRUEまたはFALSEになります。
$ this-> positions()または空の配列の値を取得する必要がある場合は、次を使用する必要があります。
$positions = $this->positions() or [];
編集:
上記の例は意図したとおりに動作しませんが、真実は||
とor
が同じではないということです...これを試してください:
<?php
function returnEmpty()
{
//return "string";
//return [1];
return null;
}
$first = returnEmpty() || [];
$second = returnEmpty() or [];
$third = returnEmpty() ?: [];
var_dump($first);
var_dump($second);
var_dump($third);
echo "\n";
これが結果です:
bool(false)
NULL
array(0) {
}
したがって、実際に3番目のオプション?:
は、戻り値または空の配列を設定する場合の正しいソリューションです。
$positions = $this->positions() ?: [];
PHP 7.2.1でテスト済み
悪いことも良いこともありません。演算子の優先順位に依存します。 ||
はor
よりも優先度が高いため、||
が主に使用されます。
あるものが別のものより本質的に優れているとは思わないが、||にこだわることをお勧めする。これはほとんどの言語でデフォルトであるためです。
編集:他の人が指摘したように、実際には2つの間に違いがあります。