Resumo : neste tutorial, você aprenderá como comparar objetos em PHP usando o operador de comparação ( ==
) e o operador de identidade ( ===
).
Para comparar objetos em PHP, você pode usar o operador de comparação (==) ou o operador de identidade (===). No entanto, cada operador se comporta de maneira diferente com base em dois critérios principais:
- Objetos são a mesma instância ou instâncias diferentes de uma classe
- Propriedades do objeto e seus valores.
É mais fácil entender como funcionam o operador de comparação e o operador de identidade por meio de um exemplo.
Vamos criar uma nova classe chamada Point
que possui duas propriedades coordenada x e coordenada y para a demonstração.
<?php
// Point.php
class Point
{
private $x;
private $y;
public function __construct($x, $y)
{
$this->x = $x;
$this->y = $y;
}
}
Linguagem de código: HTML, XML ( xml )
Comparando objetos usando o operador de comparação (==)
Ao comparar objetos usando o operador de comparação ( ==
), dois objetos serão iguais se forem instâncias da mesma classe e tiverem as mesmas propriedades e valores.
Primeiro, crie dois novos Point
objetos com os mesmos valores de propriedades e compare-os:
<?php
require 'Point.php';
$p1 = new Point(10, 20);
$p2 = new Point(10, 20);
if ($p1 == $p2) {
echo 'p1 and p2 are equal.';
} else {
echo 'p1 and p2 are not equal.';
}
Linguagem de código: HTML, XML ( xml )
Ele retorna a seguinte mensagem:
p1 and p2 are equal
Segundo, atribua $p2
a uma nova referência $p3
. Nesse caso, ambos $p2
e $p3
estão fazendo referência ao mesmo objeto.
<?php
require 'Point.php';
$p1 = new Point(10, 20);
$p2 = new Point(10, 20);
if ($p1 == $p2) {
echo 'p1 and p2 are equal.';
} else {
echo 'p1 and p2 are not equal.';
}
$p3 = $p2;
if ($p2 == $p3) {
echo 'p2 and p3 are equal.';
} else {
echo 'p2 and p3 are not equal.';
}
Linguagem de código: HTML, XML ( xml )
Neste exemplo, $p2
e $p3
também são iguais.
Terceiro, crie um novo Point
objeto com valores de propriedades diferentes e compare-o com $p3
:
$p4 = new Point(20, 10);
if ($p3 == $p4) {
echo 'p3 and p4 are equal.';
} else {
echo 'p3 and p4 are not equal.';
}
Linguagem de código: PHP ( php )
Neste exemplo, $p3
e $p4
não são iguais.
Comparando objetos usando operador de identidade (===)
Quando você usa o operador de identidade ( ===
) para comparar objetos, eles serão idênticos se e somente se ambos fizerem referência à mesma instância de uma classe.
Os objetos $p1
e a seguir $p2
são idênticos quando usamos o operador de identidade ( ===
) para comparar porque fazem referência ao mesmo objeto.
<?php
require 'Point.php';
$p1 = new Point(10, 20);
$p2 = $p1;
if ($p1 === $p2) {
echo 'p1 and p2 are identical.';
} else {
echo 'p1 and p2 are not identical.';
}
Linguagem de código: HTML, XML ( xml )
No entanto, o $p3
objeto a seguir não é idêntico ao $p1
mesmo que os valores de suas propriedades sejam iguais.
<?php
require 'Point.php';
$p1 = new Point(10, 20);
$p2 = $p1;
if ($p1 === $p2) {
echo 'p1 and p2 are identical.';
} else {
echo 'p1 and p2 are not identical.';
}
$p3 = new Point(10, 20);
if ($p1 === $p3) {
echo 'p1 and p3 are identical.';
} else {
echo 'p1 and p3 are not identical.';
}
Linguagem de código: HTML, XML ( xml )
A tabela a seguir ilustra as diferenças entre os operadores == e === ao comparar dois objetos:
Critério | == | === |
---|---|---|
Dois objetos fazem referência à mesma instância | verdadeiro | verdadeiro |
Objetos com propriedades correspondentes | verdadeiro | falso |
Objetos com propriedades diferentes | falso | falso |
Resumo
- O operador de comparação (
==
) retornatrue
se dois objetos são instâncias iguais ou diferentes de uma classe com os mesmos valores de propriedades. - O operador de identidade (===) retorna
true
se dois objetos fazem referência à mesma instância de uma classe.