의 경우 OR
사용하는 ||
것이 or
(또는 그 반대의 경우도 마찬가지) 낫다는 논리 연산자와 관련하여 오래 전에 읽은 것을 기억 합니다.
제 프로젝트가 돌아 왔을 때 이것을 사용해야 만했지만 어떤 오퍼레이터가 추천되었는지 또는 사실인지 기억이 나지 않습니다.
어느 것이 더 낫고 그 이유는 무엇입니까?
답변
“더 나은”것은 없지만 더 일반적인 것은 ||
. 그들은 다른이 우선 순위 와 ||
하나가 일반적으로 기대하는 것처럼 작동합니다.
참조 : 논리 연산자 ( 다음 예제는 여기에서 가져옴 ) :
// 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();
답변
각각의 차이 || 및 OR 및 && 및 AND는 연산자 우선 순위입니다 .
$bool = FALSE || TRUE;
- 로 해석
($bool = (FALSE || TRUE))
- 값
$bool
ISTRUE
$bool = FALSE OR TRUE;
- 로 해석
(($bool = FALSE) OR TRUE)
- 값
$bool
ISFALSE
$bool = TRUE && FALSE;
- 로 해석
($bool = (TRUE && FALSE))
- 값
$bool
ISFALSE
$bool = TRUE AND FALSE;
- 로 해석
(($bool = TRUE) AND FALSE)
- 값
$bool
ISTRUE
답변
출처 : http://wallstreetdeveloper.com/php-logical-operators/
다음은 논리 연산자 작업을위한 샘플 코드입니다.
<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() || [];
$ this-> positions ()가 false 또는 null을 반환 할 때 $ positions는 빈 배열이 될 것입니다. 하지만 그렇지 않습니다. 값은 TRUE 또는 FALSE입니다. $ this-> positions () 반환 값에 따라 다릅니다.
$ 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) {
}
따라서 실제로 세 번째 옵션 ?:
은 반환 값 또는 빈 배열을 설정하려는 경우 올바른 솔루션입니다.
$positions = $this->positions() ?: [];
PHP 7.2.1로 테스트
답변
본질적으로 하나가 다른 것보다 낫다고 생각하지 않지만 계속 고수하는 것이 좋습니다 || 대부분의 언어에서 기본값이기 때문입니다.
편집 : 다른 사람들이 지적했듯이 실제로 둘 사이에는 차이가 있습니다.
답변
나쁘거나 더 좋은 것은 없습니다. 연산자의 우선 순위에 달려 있습니다. 이후로는 ||
보다 높은 우선 순위를 가지고 or
있으므로, ||
주로 사용된다.
