Bu soru burada zaten bir cevabı var:
=== Operatör 'türgüvenli karşılaştırma' işlemi gerçekleştirirken operatörü ==, bunlar farklı ise iki farklı tür arasında atmalarını. Bu iki işlenen aynı tür ve aynı değere sahip eğer tek gerçek dönmek anlamına gelir.
Örnekler:
1 === 1: true
1 == 1: true
1 === "1": false // 1 is an integer, "1" is a string
1 == "1": true // "1" gets casted to an integer, which is 1
"foo" === "foo": true // both operands are strings and have the same value
Warning: aynı sınıfın iki örneği ===
operatörü eşleşmiyor. Örnek:
$a = new stdClass();
$a->foo = "bar";
$b = clone $a;
var_dump($a === $b); // bool(false)
Nesne karşılaştırma ile ilgili diğer yanıtlar için ek:
== Nesnenin adını ve kendi değerlerini kullanarak nesneleri karşılaştırır. Iki nesne aynı türde ve aynı üye değerleri varsa, $a == $b
true verir.
=== Nesnelerin iç nesnesi kimliği karşılaştırır. Üyeleri eşit olsa bile, $a !== $b
onlar tam aynı nesne değilse.
class TestClassA {
public $a;
}
class TestClassB {
public $a;
}
$a1 = new TestClassA();
$a2 = new TestClassA();
$b = new TestClassB();
$a1->a = 10;
$a2->a = 10;
$b->a = 10;
$a1 == $a1;
$a1 == $a2; // Same members
$a1 != $b; // Different classes
$a1 === $a1;
$a1 !== $a2; // Not the same object
Bu link bilmeniz gerekenler size söylemelidir.
Kısacası, === == diğer programlama dilleri yok aynı şekilde çalışır.
PHP Eğer gerçekten duygusu, örnek yapmazlar karşılaştırmalar yapmanıza olanak sağlar:
$y = "wauv";
$x = false;
if ($x == $y)
...
Bu bazı ilginç "kısayollar" için izin verir iken (bir sayı yerine "hata" gibi) değil gereken bir şey döndüren bir işlev beri dikkat edilmelidir yakalanmayın olmaz ve ne olduğunu merak kalacak.
PHP == değerleri karşılaştırır ve gerekirse (örneğin dize "12343sdfjskfjds" bir tamsayı karşılaştırıldığında "12343" olacak) Türü dönüşüm yapar. === Değerini VE türü karşılaştırmak Will ve türü aynı değilse false dönecektir.
Eğer PHP kılavuzunda bakarsanız işlev başarısız olursa, size bir çok fonksiyonu "false" döndürür olduğunu görürsünüz, ama onlar "yapıyor tavsiye neden olan, başarılı bir senaryo 0 döndürebilir (function ()! == False ) "hataları önlemek için.
Örneğin php fwrite () fonksiyonu almak, diğer üzerinden kullanmak için zaman gelince.
Bu fonksiyon bir dosya akışı içerik yazar. Php göre, "fwrite () yazılı bayt sayısını, hata veya FALSE döndürür.". Eğer işlev çağrısı başarılı olursa test etmek istiyorsanız, bu yöntem kusurludur.
if (!fwrite(stuff))
{
log('error!');
}
Bu sıfır dönebilirsiniz (ve başarılı olarak kabul edilir) ve durumu hala tetiklenen alır. Doğru yol olacaktır.
if (fwrite(stuff) === FALSE)
{
log('error!');
}
$a = 5; // 5 as an integer
var_dump($a == 5); // compare value; return true
var_dump($a == '5'); // compare value (ignore type); return true
var_dump($a === 5); // compare type/value (integer vs integer); return true
var_dump($a === '5'); // compare type/value (integer vs string); return false
Ancak dikkatli olun. Burada bir azılı bir sorundur.
// 'test' is found at position 0, which is interpreted as the boolean 'false'
if (strpos('testing', 'test')) {
// code...
}
vs
// true, as strict comparison was made (0 !== false)
if (strpos('testing', 'test') !== false) {
// code...
}
===
operatörü ==
operatörü özellikle bu sayılara dizeleri zorlamak olacaktır anlamsal eşitliğini karşılaştırmak olur ise exact içerik eşitliğini karşılaştırmak gerekiyordu.
Eşitlik geniş bir konudur. Bkz the Wikipedia article on Equality.