Mir ist aufgefallen, dass jemand den PHP-Operator verwendet === woraus ich keinen Sinn machen kann. Ich habe es mit einer Funktion versucht, und es entspricht auf verrückte Weise.
Wie ist dieser Operator definiert? Ich kann es nicht einmal in der Deklaration von PHP-Operatoren finden.
mögliches Duplikat von stackoverflow.com/questions/80646/…
– QUentin
10. April 2010 um 19:01 Uhr
Tim Sylvester
$a === $b (Identical)
WAHR wenn $a ist gleich $b, und sie sind vom gleichen Typ. (eingeführt in PHP 4)
Als Anmerkung, dieser Gleichheitsoperator erscheint auch in Javascript und ich glaube Perl. Es ist ziemlich üblich.
– Samantha Branham
13. Juli 2009 um 6:41 Uhr
Beachten Sie auch, dass das == auch als „mal-sehen-was-ich-daraus-machen-kann“-Operator bekannt ist, da es zu Perlen wie „100“ == „1e2“ und 0 == „führt. ein”.
– Ameisen Aasma
13. Juli 2009 um 6:52 Uhr
Da ich nicht viel über PHP weiß, verstehe ich die 100 = 1e2 (10 * 10 ^ 2), aber ich verstehe die “0” == “eins” nicht? Kann mir das jemand erklären?
– Ksempac
13. Juli 2009 um 7:28 Uhr
Ich glaube, er meinte “1” == “eins”. Der Operator == ist so, als würde er PHP sagen, dass er die linken und rechten Seitenausdrücke so analysieren und verarbeiten darf, dass die Werte gleich werden. Das === ist wie zu sagen, führen Sie hier einen binären Vergleich durch.
– Dykam
13. Juli 2009 um 8:31 Uhr
@Ksempac: Die zweite Zeichenfolge “Eins” wird nicht als Zahl 1, sondern als Zahl 0 analysiert, daher sind sie gleich.
$a == $b Gleich TRUE, wenn $a gleich $b ist, mit Ausnahme von (True == -1), was immer noch True ist.
$a === $b Identisch WAHR, wenn $a gleich $b ist und sie vom gleichen Typ sind.
> "5" == 5;
True
> "5" === 5;
False
Nicht wahr. Die drei Gleichheitszeichen geben falsch zurück, wenn $a und $b Objekte derselben Klasse sind und dieselben Werte für alle ihre (jeweiligen) Eigenschaften haben. Probieren Sie es selbst aus: class FirstClass { public $a; öffentlich $b; Funktion FirstClass() { $this -> a = 1; $dies -> b = 1; } } $first = new FirstClass(); $zweite = neue FirstClass(); if($first === $second) { echo “dreifach gleich!”; } else { echo “dreifach ungleich!”; }
– Wladimir Despotovic
15. März 2016 um 12:25 Uhr
Dykam, genau mein Punkt – aber ich vergleiche nichts. Ich sage nur, dass bei Objekten nicht der WERT über === verglichen wird, sondern die eigentliche Referenz. IE. sie können völlig die gleichen Objekte sein, das heißt, mit völlig gleichen Werten, aber === zeigt immer noch falsch an, weil sie nicht die gleiche Referenz sind.
– Wladimir Despotovic
15. März 2016 um 14:24 Uhr
Sie sagten: $a === $b Identisch WAHR, wenn $a gleich $b ist und sie vom gleichen Typ sind. Ich sage nur, das stimmt überhaupt nicht. Punkt.
– Wladimir Despotovic
15. März 2016 um 14:27 Uhr
Einfaches Kopieren und Einfügen von php.net bedeutet nicht immer, dass es korrekt ist.
– Wladimir Despotovic
15. März 2016 um 14:28 Uhr
Wenn es sich tatsächlich um dasselbe Objekt handelt, lassen sie sich gut vergleichen. Der Wert der Referenz wird verglichen, nicht die Instanz, auf die sie zeigt. Wenn überhaupt, ist es eine Frage der Definition, aber dies ist die häufigste, der ich begegnet bin.
$a == $b Gleich TRUE, wenn $a gleich $b nach Typ-Jonglage ist.
$a === $b Identisch WAHR, wenn $a gleich $b ist und sie vom gleichen Typ sind.
Ich komme mir jetzt ziemlich blöd vor, dass du es so schnell gefunden hast, ich habe versucht, es ohne großen Erfolg zu googeln.. Danke trotzdem an alle.
– Stefan Konno
13. Juli 2009 um 6:43 Uhr
In php.net haben Sie Antworten auf 99% Ihrer Fragen dazu.
– Artem Barger
13. Juli 2009 um 6:46 Uhr
farzad
In PHP können Sie zwei Werte mit dem Operator == oder === vergleichen. Der Unterschied ist dieser:
PHP ist eine dynamische, interpretierte Sprache, die bezüglich Datentypen nicht streng ist. Dies bedeutet, dass die Sprache selbst versucht, Datentypen bei Bedarf zu konvertieren.
echo 4 + "2"; // output is 6
Die Ausgabe ist der ganzzahlige Wert 6, weil + ist der numerische Additionsoperator in PHP. Wenn Sie ihm also Operanden mit anderen Datentypen zur Verfügung stellen, konvertiert PHP sie zuerst in ihren entsprechenden Typ (“2” wird in 2 konvertiert) und führt dann die Operation aus.
Wenn Sie == als Vergleichsoperator mit zwei Operanden verwenden, die möglicherweise unterschiedliche Datentypen haben, konvertiert PHP den zweiten Operandentyp in den ersten. Damit:
4 == “4” // wahr
PHP konvertiert “4” in 4 und vergleicht dann die Werte. In diesem Fall ist das Ergebnis wahr.
Wenn Sie === als Vergleichsoperator verwenden, versucht PHP keine Datentypen zu konvertieren. Wenn also die Typen der Operanden unterschiedlich sind, dann sind sie NICHT identisch.
4 === “4” // falsch
anik4e
$x == $y ist TRUE, wenn die Werte von $x und $y gleich sind:
$x = 1; //int type
$y = "1"; //string type
if ($x == $y) {
// This will execute
}
$x === $y TRUE, wenn der Wert von $x und $y gleich sind und der Typ von $x und $y gleich ist:
$x = 1; //int type
$y = "1"; //string type
if ($x === $y) {
// This will not execute
}
Keith
Sie werden diesen Operator in vielen dynamisch typisierten Sprachen sehen, nicht nur in PHP.
== wird versuchen, alles, womit es zu tun hat, in Typen umzuwandeln, die es vergleichen kann.
=== vergleicht streng den Typ und den Wert.
In jeder dynamisch typisierten Sprache müssen Sie mit == vorsichtig sein, Sie können einige interessante Fehler bekommen.
Die Dreiheit === ist weniger bequem, aber sicherer. Bei Vergleichen sollte man sich immer zusätzlich Gedanken machen, ob es sein sollte === oder ==
Das dreifache Gleichheitszeichen === prüft, ob zwei Variablen gleich und vom gleichen Typ sind.
mögliches Duplikat von stackoverflow.com/questions/80646/…
– QUentin
10. April 2010 um 19:01 Uhr