Bei der Entwicklung objektorientierter PHP-Anwendungen ist es häufig erforderlich, Objekte zu vergleichen und festzustellen, ob sie gleich sind. In diesem Artikel werden die verschiedenen Methoden zum Vergleich von Objekten in PHP und die dahinter steckenden Prinzipien eingehend untersucht.
In PHP können wir Vergleichsoperatoren (z. B. ==,! =, ==,! ==) verwenden, um Objekte zu vergleichen. Diese Operatoren helfen dabei, die Gleichheit zweier Objekte zu bestimmen, unabhängig davon, ob die Typen gleich sind oder ob sie auf dieselbe Speicheradresse verweisen. Speziell:
== : Bestimmt, ob die Attributwerte der beiden Objekte gleich sind.
! = : Bestimmt, ob die Attributwerte der beiden Objekte nicht gleich sind.
=== : Bestimmen Sie, ob zwei Objekte dasselbe Objekt sind.
! == : Bestimmen Sie, ob zwei Objekte nicht dasselbe Objekt sind.
Der == Operator wird verwendet, um Eigenschaftswerte von zwei Objekten zu vergleichen. Rückgabe true, wenn die Attributwerte der beiden Objekte gleich sind, ansonsten falsch.
$obj1 = new stdClass();
$obj2 = new stdClass();
$obj1->name = 'Zhang San';
$obj1->age = 20;
$obj2->name = 'Zhang San';
$obj2->age = 20;
if ($obj1 == $obj2) {
echo 'Zwei Objekte sind gleich';
} else {
echo 'Zwei Objekte sind nicht gleich';
}
Im obigen Code erstellen wir zwei Objekte vom Typ STDClass, die den gleichen Eigenschaftswert haben, sodass die Ausgabe "zwei Objekte gleich" ist.
Der! = Operator bestimmt, ob die Attributwerte der beiden Objekte nicht gleich sind. Rückgabe true, wenn die Attributwerte nicht gleich sind, ansonsten false zurückgeben.
$obj1 = new stdClass();
$obj2 = new stdClass();
$obj1->name = 'Zhang San';
$obj1->age = 20;
$obj2->name = 'Li Si';
$obj2->age = 30;
if ($obj1 != $obj2) {
echo 'Die Attributwerte der beiden Objekte sind nicht gleich';
} else {
echo 'Die Attributwerte von zwei Objekten sind gleich';
}
In diesem Beispiel ist das Ausgabeergebnis, da die Attributwerte von $ OBJ1 und $ OBJ2 unterschiedlich sind, "die Attributwerte der beiden Objekte nicht gleich".
Der === Operator wird verwendet, um zu vergleichen, ob zwei Objekte dasselbe Objekt sind. Rückgabe nur dann, wenn zwei Objekte auf dieselbe Speicheradresse verweisen, ansonsten falsch.
$obj1 = new stdClass();
$obj2 = $obj1;
if ($obj1 === $obj2) {
echo 'Zwei Objekte sind dasselbe Objekt';
} else {
echo 'Zwei Objekte sind nicht dasselbe Objekt';
}
In diesem Code -Snippet verweist $ OBJ2 auf die Speicheradresse von $ OBJ1, sodass die Ausgabe "zwei Objekte das gleiche Objekt sind".
Der! Geben Sie True zurück, wenn zwei Objekte auf verschiedene Speicheradressen verweisen, ansonsten false zurückgeben.
$obj1 = new stdClass();
$obj2 = $obj1;
$obj3 = new stdClass();
if ($obj1 !== $obj3) {
echo 'Zwei Objekte sind nicht dasselbe Objekt';
} else {
echo 'Zwei Objekte sind dasselbe Objekt';
}
In diesem Beispiel sind $ OBJ1 und $ OBJ3 zwei verschiedene Objekte, und die Ausgabe ist "zwei Objekte sind nicht dasselbe Objekt".
Beim PHP wird das System beim Vergleich von Objekten mithilfe des Vergleichsbetreibers die __toString () -Methode des Objekts automatisch aufgerufen, um zu versuchen, das Objekt zum Vergleich in eine Zeichenfolge umzuwandeln. Wenn das Objekt diese Methode nicht implementiert, meldet PHP einen Fehler: "Fangfataler Fehler".
Wenn das Objekt die Methode __toString () implementiert, wird diese Methode aufgerufen, wobei das Objekt in eine Zeichenfolge konvertiert und dann verglichen wird. Es ist zu beachten, dass PHP beim Vergleich von Objekten nur die Eigenschaftswerte des Objekts berücksichtigt und keine Methoden betrifft. Wenn also zwei Objekte den gleichen Eigenschaftswert haben, aber unterschiedliche Methoden, betrachtet PHP sie immer noch gleich.
In diesem Artikel wird erläutert, wie Objekte und die Prinzipien hinter ihnen in PHP verglichen werden. Durch die korrekte Verwendung des Vergleichsbetreibers können wir die Gleichheit zweier Objekte effektiv beurteilen und ob sie dasselbe Objekt sind, und wir müssen beim Vergleich der Objekte eher auf die Eigenschaftswerte als auf Methoden achten.