(PHP 5 >= 5.1.0, PHP 7, PHP 8)
property_exists — Checks if the object or class has a property
This function checks if the given property exists in
the specified class.
Note:
As opposed with isset(), property_exists() returns
trueeven if the property has the valuenull.
object_or_classThe class name or an object of the class to test for
propertyThe name of the property
Example #1 A property_exists() example
<?php
class myClass {
public $mine;
private $xpto;
static protected $test;
static function test() {
var_dump(property_exists('myClass', 'xpto')); //true
}
}
var_dump(property_exists('myClass', 'mine')); //true
var_dump(property_exists(new myClass, 'mine')); //true
var_dump(property_exists('myClass', 'xpto')); //true
var_dump(property_exists('myClass', 'bar')); //false
var_dump(property_exists('myClass', 'test')); //true
myClass::test();
?>
property_exists() returns true regardless of property
visibility, detects dynamic properties added to instances (when the class
uses #[AllowDynamicProperties]), and ignores
__isset
and __get magic methods.
Example #2 Visibility, dynamic properties, and magic methods
<?php
#[AllowDynamicProperties]
class MyClass {
public $public;
private $private;
static protected $protectedStatic;
// ignored by property_exists
public function __isset(string $name): bool {
return true;
}
// ignored by property_exists
public function __get(string $name): string {
return '';
}
}
$instance = new MyClass();
$instance->instanced = 'abc';
var_dump(property_exists($instance, 'public')); // true (public)
var_dump(property_exists($instance, 'private')); // true (visibility ignored)
var_dump(property_exists($instance, 'protectedStatic')); // true (visibility ignored)
var_dump(property_exists($instance, 'instanced')); // true (dynamic property on instance)
var_dump(property_exists($instance, 'undefined')); // false (not declared, __isset ignored)
var_dump(property_exists(MyClass::class, 'public')); // true
var_dump(property_exists(MyClass::class, 'instanced')); // false (dynamic props not on class)
var_dump(property_exists(MyClass::class, 'undefined')); // false
?>The above example will output:
bool(true) bool(true) bool(true) bool(true) bool(false) bool(true) bool(false) bool(false)
Note:
Using this function will use any registered autoloaders if the class is not already known.
Note:
The property_exists() function cannot detect properties that are magically accessible using the
__getmagic method.