web-dev-qa-db-ja.com

3つの異なる等しい

違いは何ですか ===、および===

1つの等号を使用すると変数が宣言され、2つの等号は比較条件に使用され、最後に3つの等号は宣言された変数の値を比較するために使用されると思います。

147
Strawberry

= theassignment operator== the 'equal'比較演算子および=== the 'identical'比較演算子

$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)

=====の必要性、およびそれぞれを使用する状況の詳細については、 ドキュメント を参照してください。

169
gnarf
  • =は代入演算子です
  • ==は比較演算子です(2つの変数の値が等しいかどうかを確認します)
  • ===は同一の比較演算子です(2つの変数が等しい値を持ち、同じ型であるかどうかを確認します)。
22
Rich Adams

=代入演算子

== 2つの変数の値が同じかどうかを確認します

=== 2つの変数の値が同じかどうか、および型が同じかどうかを確認します

8
Silvio Donnini

=演算子は、値を変数$ 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型です。ここで出力

2
Gideon

高度な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";
?>

注:比較は、各「最初の試行」が「2回目の試行」に非常に近い場合にのみ有効です。それらが大幅に異なる場合は、比較の実行中にプロセッサが何か他のことを実行しているため、結果が信頼できないため、ベンチマークを再度実行する必要があることを意味します。

0
lucaferrario