Manual do PHP
Anterior | Capítulo 19. Classes e Objetos (PHP 5) | Próxima

# Comparando objetos

No PHP 5, comparação de objetos é mais complicada que no PHP 4 e mais de acordo com o que é esperado de uma Linguagem Orientada a Objetos (não que PHP 5 seja uma delas).

Quando usar o operador de comparação (`==`), variáveis objeto são comparadas de maneira simples, nominalmente: Duas instâncias de objetos são iguais se tem os mesmos atributos e valores, e são instâncias da mesma classe.

Por outro lado, quando usando o operador de identidade (`===`), variáveis objetos são identicas se e somente se elas se referem a mesma instância da mesma classe.

Um exemplo evidenciará essas regras.

Exemplo 19-32. Exemplo de comparação de objetos no PHP 5
`<?php function bool2str($bool) { if ($bool === false) { return 'FALSO'; } else { return 'VERDADEIRO'; } } function compareObjetos(&$o1, &$o2) { echo 'o1 == o2 : '.bool2str($o1 == $o2)."\n"; echo 'o1 != o2 : '.bool2str($o1 != $o2)."\n"; echo 'o1 === o2 : '.bool2str($o1 === $o2)."\n"; echo 'o1 !== o2 : '.bool2str($o1 !== $o2)."\n"; } class Flag { var $flag; function Flag($flag=true) { $this->flag = $flag; } } class OutraFlag { var $flag; function OutraFlag($flag=true) { $this->flag = $flag; } } $o = new Flag(); $p = new Flag(); $q = $o; $r = new OutraFlag(); echo "Duas instâncias da mesma classe\n"; compareObjetos($o, $p); echo "\nDuas referências para a mesma instância\n"; compareObjetos($o, $q); echo "\nInstâncias de duas classes diferentes\n"; compareObjetos($o, $r); ?>`

This example will output:

    Duas instâncias da mesma classe
    o1 == o2 : VERDADEIRO
    o1 != o2 : FALSO
    o1 === o2 : FALSO
    o1 !== o2 : VERDADEIRO

    Duas referências para a mesma instância
    o1 == o2 : VERDADEIRO
    o1 != o2 : FALSO
    o1 === o2 : VERDADEIRO
    o1 !== o2 : FALSO

    Instâncias de duas classes diferentes
    o1 == o2 : FALSO
    o1 != o2 : VERDADEIRO
    o1 === o2 : FALSO
    o1 !== o2 : VERDADEIRO

Anterior | Principal | Próxima
Clonando objetos | Acima | Reflexão