PHP Comparar Objetos

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 Pointque 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 Pointobjetos 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  $p2a uma nova referência $p3. Nesse caso, ambos  $p2e $p3estã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  $p3também são iguais.

Terceiro, crie um novo Pointobjeto 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  $p4nã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 $p1e  a seguir $p2sã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  $p3objeto a seguir não é idêntico ao  $p1mesmo 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 ( ==) retorna truese dois objetos são instâncias iguais ou diferentes de uma classe com os mesmos valores de propriedades.
  • O operador de identidade (===) retorna truese dois objetos fazem referência à mesma instância de uma classe.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *