(PHP 5 >= 5.1.0, PHP 7, PHP 8)
property_exists — Vérifie si un objet ou une classe possède une propriété
Cette fonction vérifie si la propriété property
existe dans la classe spécifiée.
Note:
property_exists() retourne
truemême si la propriété a une valeurnull, contrairement à la fonction isset().
object_or_classLe nom de la classe ou un objet de la classe à tester
propertyLe nom de la propriété
Exemple #1 Exemple avec property_exists()
<?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() retourne true quelle que soit la
visibilité de la propriété, détecte les propriétés dynamiques ajoutées aux
instances (lorsque la classe utilise
#[AllowDynamicProperties]), et ignore les méthodes
magiques
__isset
et __get.
Exemple #2 Visibilité, propriétés dynamiques et méthodes magiques
<?php
#[AllowDynamicProperties]
class MyClass {
public $public;
private $private;
static protected $protectedStatic;
// ignorée par property_exists
public function __isset(string $name): bool {
return true;
}
// ignorée par property_exists
public function __get(string $name): string {
return '';
}
}
$instance = new MyClass();
$instance->instanced = 'abc';
var_dump(property_exists($instance, 'public')); // true (publique)
var_dump(property_exists($instance, 'private')); // true (visibilité ignorée)
var_dump(property_exists($instance, 'protectedStatic')); // true (visibilité ignorée)
var_dump(property_exists($instance, 'instanced')); // true (propriété dynamique sur l'instance)
var_dump(property_exists($instance, 'undefined')); // false (non déclarée, __isset ignorée)
var_dump(property_exists(MyClass::class, 'public')); // true
var_dump(property_exists(MyClass::class, 'instanced')); // false (les propriétés dynamiques ne sont pas sur la classe)
var_dump(property_exists(MyClass::class, 'undefined')); // false
?>L'exemple ci-dessus va afficher :
bool(true) bool(true) bool(true) bool(true) bool(false) bool(true) bool(false) bool(false)
Note:
L'usage de cette fonction utilisera tous les autoloaders enregistrés si la classe n'est pas encore connue.
Note:
La fonction property_exists() ne peut pas détecter les propriétés qui sont accessibles en utilisant la méthode magique
__get.