3つの異なる


149

どのような違いがある======

1つの等号の使用は変数の宣言であり、2つの等号は比較条件であり、最後に3つの等号は宣言された変数の値の比較です。


例を確認してください...私はそれがより多くのものを明らかにするだろうと投稿しました..
InfantPro'Aravind '

1
上級のPHPユーザーの場合、==と===の違いを理解し、「両方のオペランドが同じ型であることが確実な場合、==または===と比較する方が速いですか?」と自問してください。以下の私のベンチマークスクリプトで。
lucaferrario 2013

@Strawberry質問のタグにはjavascriptタグも含まれているはずです。これは、その言語にも当てはまるためです。
Funk Forty Niner

(更新):人々が=JavaScriptで使用している質問がかなりあったため、私はJavaScriptタグを編集に追加しました。これはPHPだけでなく、他の言語にも当てはまります。
Funk Forty Niner

私は先に行って、JavaScriptタグを削除:ここにすべての答えは(非常に弱いとなる最新除く)PHPについては、存在しているされている言語は、それを処理する方法の違いは、と同様の事実上の標準的なJavaScriptの質問がすでに存在している(どちらのequals演算子(== vs ===)をJavaScriptの比較で使用する必要がありますか?)。
JJJ 2018年

回答:


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)

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


2つの同じ日時を比較すると、誤った結果になります。なぜですか?例:sandbox.onlinephpfunctions.com/code/…
stloc

3
@stloc、===オブジェクトを使用すると、同じ内容であるかどうかではなく、同じオブジェクトであるかどうかがわかります。
Andrea

PHP4で導入、Y2018でおもしろい;-)
mvorisek

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

8

=代入演算子

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

=== 2つの変数の値が同じかどうか、およびそれらの型が同じかどうかをチェックします


1
また、2つの比較演算子の!=および!== '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";
?>

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


9
このようなマイクロベンチマークはあまり信頼できません。また、パフォーマンスの問題を心配し==たり===、その原因として考えたりすることもほとんどありません。IMO:比較について===緩く(==)したくない場合を除いて、厳密()にすることをお勧めします。奇妙なエッジケースの数、つまり奇妙"5 is not a number" == 5なバグにつながる可能性があります。===この問題に苦しむことはありません。
gnarf 2013年

私のテストは、プログラマーに ===、パフォーマンスの理由でしは間違っをでした。したがって、プログラマーは自由に、===または==論理的な理由に基づいて自由に選択できますが、パフォーマンス上の理由には基づいていません。
lucaferrario 2016
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.