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
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.
controllerà se il tipo di dati è lo stesso come il valore
if ("21" == 21) // true
if ("21" === 21) // false
===
confronta valore e tipo.
== non confronta i tipi, === sì.
0 == false
viene valutato come vero, ma
0 === false
non
È un vero confronto di uguaglianza.
"" == False
per esempio è true
.
"" === False
è false
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).
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.
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 ...)
Nel caso di strpos, i commenti "falsi"/"veri" non sono molto chiari, ma immagino che tu possa capirlo abbastanza bene nel contesto. – luiscubal
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. –
@luiscubal - Ho chiarito. –