Lors du développement d'applications PHP orientées objet, il est souvent nécessaire de comparer les objets et de déterminer s'ils sont égaux. Cet article explorera en profondeur les différentes méthodes de comparaison d'objets en PHP et les principes derrière eux.
Dans PHP, nous pouvons utiliser des opérateurs de comparaison (tels que == ,! =, == ,! ==) pour comparer les objets. Ces opérateurs aident à déterminer l'égalité de deux objets, que les types soient les mêmes, ou qu'ils pointent vers la même adresse mémoire. Spécifiquement:
== : détermine si les valeurs d'attribut des deux objets sont égales.
! = : Détermine si les valeurs d'attribut des deux objets ne sont pas égales.
=== : Déterminez si deux objets sont le même objet.
! == : Déterminez si deux objets ne sont pas le même objet.
L'opérateur == est utilisé pour comparer les valeurs de propriété de deux objets. Renvoie true si les valeurs d'attribut des deux objets sont égales, sinon faux.
$obj1 = new stdClass();
$obj2 = new stdClass();
$obj1->name = 'Zhang San';
$obj1->age = 20;
$obj2->name = 'Zhang San';
$obj2->age = 20;
if ($obj1 == $obj2) {
echo 'Deux objets sont égaux';
} else {
echo 'Deux objets ne sont pas égaux';
}
Dans le code ci-dessus, nous créons deux objets de type stdclass, qui ont la même valeur de propriété, donc la sortie est "deux objets égaux".
L'opérateur! = Détermine si les valeurs d'attribut des deux objets ne sont pas égales. Renvoie true si les valeurs d'attribut ne sont pas égales, sinon renvoyez false.
$obj1 = new stdClass();
$obj2 = new stdClass();
$obj1->name = 'Zhang San';
$obj1->age = 20;
$obj2->name = 'Li si';
$obj2->age = 30;
if ($obj1 != $obj2) {
echo 'Les valeurs d'attribut des deux objets ne sont pas égales';
} else {
echo 'Les valeurs d'attribut de deux objets sont égales';
}
Dans cet exemple, comme les valeurs d'attribut de $ obj1 et $ obj2 sont différentes, le résultat de sortie est "les valeurs d'attribut des deux objets ne sont pas égales".
L'opérateur === est utilisé pour comparer si deux objets sont le même objet. Renvoie True uniquement si deux objets pointent vers la même adresse mémoire, sinon Faux.
$obj1 = new stdClass();
$obj2 = $obj1;
if ($obj1 === $obj2) {
echo 'Deux objets sont le même objet';
} else {
echo 'Deux objets ne sont pas le même objet';
}
Dans cet extrait de code, $ obj2 pointe vers l'adresse mémoire de $ obj1, donc la sortie est "deux objets sont le même objet".
L'opérateur! == est une opération symétrique de l'opérateur ===, qui détermine si les deux objets ne sont pas le même objet. Renvoie true si deux objets pointent vers différentes adresses de mémoire, sinon renvoyez false.
$obj1 = new stdClass();
$obj2 = $obj1;
$obj3 = new stdClass();
if ($obj1 !== $obj3) {
echo 'Deux objets ne sont pas le même objet';
} else {
echo 'Deux objets sont le même objet';
}
Dans cet exemple, $ obj1 et $ obj3 sont deux objets différents, et la sortie est "deux objets ne sont pas le même objet".
Dans PHP, lors de la comparaison d'objets à l'aide de l'opérateur de comparaison, le système appellera automatiquement la méthode __toString () de l'objet pour essayer de convertir l'objet en une chaîne à comparaison. Si l'objet n'implémente pas cette méthode, PHP rapportera une erreur: "Erreur fatale capable".
Si l'objet implémente la méthode __toString (), cette méthode est appelée, convertissant l'objet en une chaîne, puis comparant. Il convient de noter que lors de la comparaison des objets, PHP ne considère que les valeurs de propriété de l'objet et n'implique pas de méthodes. Donc, si deux objets ont la même valeur de propriété, mais des méthodes différentes, PHP les considère toujours égaux.
Cet article explique comment comparer les objets et les principes derrière eux en PHP. En utilisant correctement l'opérateur de comparaison, nous pouvons juger efficacement l'égalité de deux objets et s'il s'agit du même objet, et nous devons prêter attention aux valeurs des propriétés plutôt qu'aux méthodes lors de la comparaison des objets.