2009-05-14 11 views
5

J'ai programmé en PHP pendant un moment mais je ne comprends toujours pas la différence entre == et ===. Je sais que c'est une mission. Et == est égal à. Alors, quel est le but de ===?Que fait === faire en PHP

Répondre

26

Il compare la valeur et tapez l'égalité.

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

Il a un analogue: == qui compare le type et la valeur des inégalités

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

Il est particulièrement utile pour des fonctions comme strpos - qui peut retourner 0 valablement!.

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 liste d'autres langues qui ont une analogie avec triple-égaux.

+0

Dans le cas de strpos, ce "faux"/"vrai" commentaires n'est pas très clair, mais je suppose que vous pouvez le comprendre assez bien dans le contexte. – luiscubal

+0

En outre, en raison des résultats que Tom souligne, il est presque toujours préférable d'utiliser === ou! == lors de l'évaluation des valeurs de retour. Même si la fonction ne renvoie pas de valeur ambiguë pour l'instant, cela peut changer dans le futur. –

+0

@luiscubal - J'ai clarifié. –

4

Il vérifie si le type de données est la même, ainsi que la valeur

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

=== compare la valeur et de type.

2

== ne compare pas les types, === fait.

0 == false 

true, mais évalue

0 === false 

ne le fait pas

0

C'est une véritable comparaison d'égalité.

"" == False par exemple est true.

"" === False est false

12

Il est vrai que === compare la valeur et le type, mais il y a un cas qui n'a pas encore été mentionné et qui est lorsque vous comparez avec des objets == et === .

Vu le code suivant:

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 

Dans le cas d'objets === compare référence, non type et la valeur (comme $ a et $ b sont des deux types égaux et valeur).

6

Le manuel PHP a a couple of very nice tables ("Comparaisons lâches avec ==" et "Comparaisons strictes avec ===") qui montrent quel résultat == et === donneront en comparant différents types de variables.

0

Au minimum, === est plus rapide que == car il n'y a pas de coulée/coédition automagique en cours, mais c'est tellement minimal que cela vaut à peine la peine d'être mentionné. (bien sûr, je viens de le mentionner ...)