property_exists
(PHP 5 >= 5.1.0, PHP 7, PHP 8)
Checks if the object or class has a property
Description
This function checks if the given property exists in the specified class.
As opposed with isset(), property_exists() returns true even if the property has the value null.
Parameters
object_or_classThe class name or an object of the class to test for
propertyThe name of the property
Return Values
Returns true if the property exists, false if it doesn't exist.
Examples
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.
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)Notes Uses-autoload
The property_exists() function cannot detect properties that are magically accessible using the __get magic method.