sourcecode

논리 연산자, | 또는 OR?

copyscript 2022. 10. 7. 22:22
반응형

논리 연산자, | 또는 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))
  • 의 가치$boolTRUE

$bool = FALSE OR TRUE;

  • 로 해석되다(($bool = FALSE) OR TRUE)
  • 의 가치$boolFALSE

$bool = TRUE && FALSE;

  • 로 해석되다($bool = (TRUE && FALSE))
  • 의 가치$boolFALSE

$bool = TRUE AND FALSE;

  • 로 해석되다(($bool = TRUE) AND FALSE)
  • 의 가치$boolTRUE

출처 : 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

반응형