The function behaves differently depending on whether the property has been present in the class declaration, or has been added dynamically, if the variable has been unset()
<?php
class TestClass {
public $declared = null;
}
$testObject = new TestClass;
var_dump(property_exists("TestClass", "dynamic")); var_dump(property_exists($testObject, "dynamic")); $testObject->dynamic = null;
var_dump(property_exists($testObject, "dynamic")); unset($testObject->dynamic);
var_dump(property_exists($testObject, "dynamic")); var_dump(property_exists($testObject, "declared")); unset($testObject->declared);
var_dump(property_exists($testObject, "declared"));