논리 연산자, | 또는 OR?
얼마 전에 논리 연산자에 대해 읽은 기억이 있습니다.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
이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
출처 : 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는 빈 배열이라고 생각할 수 있습니다.하지만 그렇지는 않다.값은 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) {
}
그래서 세 번째 방법은?:
반환된 값 또는 빈 배열을 설정하는 경우 올바른 솔루션입니다.
$positions = $this->positions() ?: [];
PHP 7.2.1에서 테스트 완료
기본적으로 다른 언어보다 낫다고는 생각하지 않지만, 대부분의 언어에서 기본값이 ||이기 때문에 |를 사용하는 것이 좋습니다.
편집: 다른 사람들이 지적했듯이 그 둘 사이에는 정말로 차이가 있다.
나쁠 것도 없고, 좋은 것도 없고, 단지 연산자의 우선순위에 달려 있을 뿐입니다.★★||
우선도가 or
, (그래서)||
주로 사용됩니다.
short-circuit을있는 는 short-circuit 인 short-circuit과 합니다).$B
(Pascal서서).
설명:
function A(){
...Do something..
return true;
}
function B(){
...Do something..
return true;
}
if ( A() OR B() ) { .....
「」가 되고 있습니다.B()
절대 실행되지 않습니다. 함수는 " " " 입니다.A()
참이다 OR 문의 결과는 식의 두 번째 부분을 평가할 필요 없이 첫 번째 부분부터 알 수 있습니다.
, ,에서는( A() || B() )
두 번째 부품은 첫 번째 부품 값에 관계없이 항상 평가됩니다.
프로그래밍을 '어울리다'를 사용해야 .OR
첫 번째 이 반환되는 ).false
그리고 두 번째 부분은 실제로 평가되어야 합니다.)
언급URL : https://stackoverflow.com/questions/5998309/logical-operators-or-or
'sourcecode' 카테고리의 다른 글
Python Flask, 콘텐츠 유형 설정 방법 (0) | 2022.10.27 |
---|---|
Laravel 데이터베이스 스키마, Nullable Foreign (0) | 2022.10.07 |
개체가 목록인지 태플인지(문자열이 아님) 확인하는 방법 (0) | 2022.10.07 |
JavaScript에서 여러 줄의 코드에 걸쳐 문자열을 분할하려면 어떻게 해야 합니까? (0) | 2022.10.07 |
MariaDB 10.1은 원칙 2.5와 호환됩니까? (0) | 2022.10.07 |