A função property_exists é utilizada para verificar se um objeto ou classe tem uma determinada propriedade. Esta função se comporta de maneira diferente de acordo com a propriedade testada existir ou não na declaração da classe, assim como se for adicionada dinamicamente e após, ser removida com a função unset();
É importante estar ciente deste modo de funcionamento, para justamente evitar surpresas durante a programação, visto que o comportamento da função pode ser bem diferente do que o programador intuitivamente pode esperar.
Abaixo exemplificamos o comportamento:
<?php class ClasseTeste { public $declarada = null; } $ObjetoTeste = new ClasseTeste; var_dump(property_exists("ClasseTeste", "dinamico")); // boolean false, como esperado var_dump(property_exists($ObjetoTeste, "dinamico")); // boolean false, como esperado $ObjetoTeste->dinamico = null; var_dump(property_exists($ObjetoTeste, "dinamico")); // boolean true unset($ObjetoTeste->dinamico); var_dump(property_exists($ObjetoTeste, "dinamico")); // boolean false, novamente. var_dump(property_exists($ObjetoTeste, "declarada")); // boolean true, como esperado unset($ObjetoTeste->declarada); var_dump(property_exists($ObjetoTeste, "declarada")); // boolean true, mesmo se utilizado a função unset(). Surpresa!