2009-05-14 3 views
5

Ho programmato in PHP per un po ', ma ancora non capisco la differenza tra == e ===. So che = è un incarico. E == è uguale a. Quindi qual è lo scopo di ===?Cosa fa === in PHP

risposta

26

vuol confronta sia il valore e digitare l'uguaglianza.

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

Ha un analogo: == che confronta tipo e il valore disuguaglianza

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

E 'particolarmente utile per funzioni come strpos - che può restituire 0 validamente!.

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 messa in vendita di altre lingue che hanno un'analogia con triple-eguali.

+0

Nel caso di strpos, i commenti "falsi"/"veri" non sono molto chiari, ma immagino che tu possa capirlo abbastanza bene nel contesto. – luiscubal

+0

Inoltre, a causa dei risultati che Tom sottolinea, è quasi sempre meglio usare === o! == quando si valutano i valori di ritorno. Anche se la funzione attualmente non restituisce un valore ambiguo, ciò potrebbe cambiare in futuro. –

+0

@luiscubal - Ho chiarito. –

4

controllerà se il tipo di dati è lo stesso come il valore

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

=== confronta valore e tipo.

2

== non confronta i tipi, === sì.

0 == false 

viene valutato come vero, ma

0 === false 

non

0

È un vero confronto di uguaglianza.

"" == False per esempio è true.

"" === False è false

12

E 'vero che === confronta sia il valore e tipo, ma c'è un caso che non è stato ancora citato e cioè quando si confrontano gli oggetti con == e === .

Dato il codice seguente:

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 

In caso di oggetti === confronta riferimento, non digitare e valore (da $ a e $ b sono sia di tipo e valore uguale).

6

Il manuale PHP ha a couple of very nice tables ("Confronti allentati con ==" e "confronti stretti con ===") che mostrano quale risultato == e === daranno quando si confrontano vari tipi di variabili.

0

Minimamente, === è più veloce di == perché non c'è nessuna fusione automagic/coassialità in corso, ma è così minima che vale la pena menzionarla. (ovviamente, l'ho appena menzionato ...)