PHP – Atenção no uso de property_exists em verificações de propriedades de Classes / Objetos

image_pdfimage_print

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!
Gostou? Tire um minutinho e dê sua contribuição para Drall Dev Community no Patreon!