3 개의 다른 평등


149

차이점은 무엇이며 =, ==그리고는 ===?

하나의 등호를 사용하는 것은 변수를 선언하는 것이고 두 개의 등호는 비교 조건을위한 것이고 마지막으로 세 개의 등호는 선언 된 변수의 값을 비교하는 것입니다.


예를 확인하십시오 ... 나는 더 많은 것을 명확히 할 수 있도록 게시했습니다 ..
InfantPro'Aravind '

1
고급 PHP 사용자의 경우 ==와 ===의 차이점을 알고 그들 스스로에게 "두 피연산자가 동일한 유형인지 확신 할 때 == 또는 ===와 비교하는 것이 더 빠릅니까?" 아래의 벤치 마크 스크립트에서.
lucaferrario

@Strawberry 질문의 태그에는 해당 언어에도 적용되므로 javascript 태그가 포함되어야한다고 생각합니다.
Funk Forty Niner

(업데이트) : 사람들이 =자바 스크립트에서 사용 하고 있는 질문이 꽤 많으므로 편집에 자바 스크립트 태그를 추가했습니다 . 그것은 PHP뿐만 아니라 다른 언어에도 적용됩니다.
Funk Forty Niner 2016 년

JavaScript 태그를 삭제했습니다. 여기의 모든 답변은 PHP에 관한 것입니다 (최신 약한 것을 제외하고), 언어가 처리하는 방법 에는 차이가 있으며 이미 유사한 표준 JavaScript 질문 이 있습니다. JavaScript 비교에서 연산자 (== vs ===)를 사용해야합니까? ).
JJJ

답변:


172

당신은이 할당 연산자 , '동일'비교 연산자'동일한'비교 연산자를 .======

$a = $b     Assign      Sets $a to be equal to $b.
$a == $b    Equal       TRUE if $a is equal to $b.
$a === $b   Identical   TRUE if $a is equal to $b, and they are of the same type. (introduced in PHP 4)

==및 의 필요성 ===과 상황 에 대한 자세한 내용 은 docs를 참조하십시오 .


두 개의 동일한 날짜 시간을 비교할 때 잘못된 결과가 발생하는 이유는 무엇입니까? 예 : sandbox.onlinephpfunctions.com/code/…
stloc

3
@stloc ( ===객체 포함)은 동일한 내용이 아닌 동일한 객체인지 알려줍니다.
Andrea

PHP4에서 소개, Y2018에서 재미 있음 ;-)
mvorisek

22
  • = 할당 연산자입니다
  • == 비교 연산자 (두 변수가 동일한 값을 갖는지 확인)
  • === 동일한 비교 연산자입니다 (두 변수의 값이 같고 유형이 같은지 확인).

8

= 할당 연산자

== 두 변수의 값이 같은지 확인

=== 두 변수의 값이 같은지 확인하고 유형이 같은지 확인합니다


1
또한 두 비교 연산자의! = 및! == 'not'버전에 대해서도 알고 있습니다. 어떤 언어들은 이런 종류의 혼란을 피하기 위해 : =를 대입으로 사용합니다.
Phil Perry

3

= 연산자는 값을 변수 $ six = 6에 할당합니다. 값 6은 변수 $ six에 지정됩니다

== 연산자는 두 변수의 값이 같고 대부분 if 문과 같은 조건에서 사용되는지 확인합니다.

$a = 2;
$b = 2;
if ($a == $b) { 
    echo both variables have the same value; 
}

=== ==와 유사한 연산자 (값이 같은지 확인)와 동일한 데이터 유형이 있는지 확인

$a = 2;
$b = "2";
if ($a === $b) {
    echo "both variable have same value and of same data type";
} else {
    echo 'both variable is either not equal or not of same data type';
}

// 여기서 $ a는 int 유형이고 $ b는 string 유형입니다. 여기에 출력


0

고급 PHP 사용자의 경우 차이점 ==과 자신의 차이점을 알고 ===" 두 피연산자가 동일한 유형인지 확신 할 때 ==또는 비교하는 것이 더 ===빠릅니까?"

짧고 일반적인 대답은 다음과 같습니다. 이 경우에는 성능이 향상되지 ===않으므로을 사용해야 ==합니다.

그것은 스스로를 벤치마킹에 관심이있는 사람의 경우, 당신은 내가 임시 쓴 다음 코드를 사용하여 서로 다른 값을 시도 할 수 있습니다 $a$b:

<?php
    // CONFIGURATION
    $cycles = 1000000;
    $a = 'random string 1';
    $b = 'random string 2';

    // FUNCTIONS
    function compare_two_equals($a, $b) {
        if ($a == $b) {
            return TRUE;
        } else {
            return FALSE;
        }
    }

    function compare_three_equals($a, $b) {
        if ($a === $b) {
            return TRUE;
        } else {
            return FALSE;
        }
    }

    // EXECUTION
    $time = microtime(TRUE);
    for ($count_a = 0; $count_a < $cycles; $count_a++) {
        compare_two_equals($a, $b);
    }
    $time_two_a = microtime(TRUE) - $time;
    $time = microtime(TRUE);
    for ($count_a = 0; $count_a < $cycles; $count_a++) {
        compare_three_equals($a, $b);
    }
    $time_three_a = microtime(TRUE) - $time;
    $time = microtime(TRUE);
    for ($count_a = 0; $count_a < $cycles; $count_a++) {
        compare_two_equals($a, $b);
    }
    $time_two_b = microtime(TRUE) - $time;
    $time = microtime(TRUE);
    for ($count_a = 0; $count_a < $cycles; $count_a++) {
        compare_three_equals($a, $b);
    }
    $time_three_b = microtime(TRUE) - $time;
    $time = microtime(TRUE);

    // RESULTS PRINTING
    print "<br />\nCOMPARE == (FIRST TRY): " . number_format($time_two_a, 3) . " seconds";
    print "<br />\nCOMPARE == (SECOND TRY): " . number_format($time_two_b, 3) . " seconds";
    print "<br />\nCOMPARE === (FIRST TRY): " . number_format($time_three_a, 3) . " seconds";
    print "<br />\nCOMPARE === (SECOND TRY): " . number_format($time_three_b, 3) . " seconds";
?>

참고 : 비교는 각 "FIRST TRY"가 "SECOND TRY"에 매우 가까운 경우에만 유효합니다. 이들이 상당히 다른 경우, 비교를 수행하는 동안 프로세서가 다른 작업을 수행 중이므로 결과를 신뢰할 수 없으므로 벤치 마크를 다시 실행해야합니다.


9
이와 같은 마이크로 벤치 마크는 그다지 신뢰할 수 없습니다. 또한 성능 문제의 원인으로 ==또는 걱정할 가능성이 거의 없습니다 ===. IMO : 비교에 대해 ===명시 적으로 느슨하게하고 싶지 않으면 엄격하게하는 것이 좋습니다 ( ==). 이상한 경우의 수, 즉 "5 is not a number" == 5엉뚱한 버그로 이어질 수 있습니다. ===이 문제로 고통받지 않습니다.
gnarf

내 테스트는 프로그래머에게 ===성능상의 이유로 선택하면 잘못되었다고 알려주는 것이 었습니다 . 프로그래머가 자유롭게 선택할 수 있도록 ===또는 ==성능상의 이유로 논리적 이유에 따라 아니지만 : 전혀 고려되지 않아야 하나 또는 다른과 성능을 선호하는 다른 경우가 있습니다.
lucaferrario
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.