2009-05-14 6 views
5

私はしばらくPHPでプログラミングしていますが、私はまだ==と===の違いを理解していません。私はそれが割り当てだと分かっています。そして==はと等しいです。それでは、何の目的は?PHPで何ができるか

答えて

26

ありません。 !==型と値不平等

if("45" !== 45) //true 
if(45 !== 45) //false 
if(0 !== false)//true 

を比較することがstrposのような機能のために特に便利です - 有効に0を返すことができた。

if("45" === 45) //false 
if(45 === 45) //true 
if(0 === false)//false 

それはアナログを持っています。三重イコールとの類似を持っている他の言語をリスト

strpos("hello world", "hello") //0 is the position of "hello" 

//now you try and test if "hello" is in the string... 

if(strpos("hello world", "hello")) 
//evaluates to false, even though hello is in the string 

if(strpos("hello world", "hello") !== false) 
//correctly evaluates to true: 0 is not value- and type-equal to false 

Here's a good wikipedia table

+0

strposの場合、その "偽"/"真"のコメントはあまり明確ではありませんが、文脈で十分理解できると思います。 – luiscubal

+0

また、Tomが指摘した結果のために、戻り値を評価するときは、ほとんど常に===または!==を使用する方が良いです。関数が現在、あいまいな値を現在返さない場合でも、将来変更される可能性があります。 –

+0

@luiscubal - 私は明確にしました。 –

4

データ型が同じであるだけでなく、値

if ("21" == 21) // true 
if ("21" === 21) // false 
3

===タイプを比較している。場合はチェックします

2

==は型を比較しません。===そうです。

0 == false 

はtrueと評価が、

0 === false 

は、それは両方の値を比較し、平等を入力しないで

0

これは真の平等比較です。例えば、trueである。

"" === Falseは、===は、値と型の両方を比較することは事実であるが、まだ言及し、あなたは==でオブジェクトを比較し、===ときにはされていない一つのケースがあるfalse

12

です。

与えられる以下のコード:オブジェクトの場合

class TestClass { 
    public $value; 

    public function __construct($value) { 
    $this->value = $value; 
    } 
} 

$a = new TestClass("a"); 
$b = new TestClass("a"); 

var_dump($a == $b); // true 
var_dump($a === $b); // false 

は===($および$ bの両方同じ種類および値のものであるように)入力した値ではない、基準とを比較します。

6

PHPマニュアルには、さまざまな変数タイプを比較するときにどのような結果==と===が表示されるかを示すa couple of very nice tables(「==とルーズ比較」と「===との厳密な比較」)があります。

0

最小===は自動化のキャスト/コーションがないので、==よりも高速ですが、それほど重要ではないと言及されています。 (もちろん、私はそれを言いました...)

関連する問題