(PHP 5 >= 5.1.0, PHP 7, PHP 8)
property_exists — Verifica si un objeto o una clase posee una propiedad
Esta función verifica si la propiedad property
existe en la clase especificada.
Nota:
property_exists() devuelve
trueincluso si la propiedad tiene un valornull, a diferencia de la función isset().
object_or_classEl nombre de la clase o un objeto de la clase a probar
propertyEl nombre de la propiedad
Ejemplo #1 Ejemplo con 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() devuelve true independientemente de la
visibilidad de la propiedad, detecta las propiedades dinámicas añadidas a las
instancias (cuando la clase utiliza #[AllowDynamicProperties])
e ignora los métodos mágicos
__isset
y __get.
Ejemplo #2 Visibilidad, propiedades dinámicas y métodos mágicos
<?php
#[AllowDynamicProperties]
class MyClass {
public $public;
private $private;
static protected $protectedStatic;
// ignorado por property_exists
public function __isset(string $name): bool {
return true;
}
// ignorado por property_exists
public function __get(string $name): string {
return '';
}
}
$instance = new MyClass();
$instance->instanced = 'abc';
var_dump(property_exists($instance, 'public')); // true (pública)
var_dump(property_exists($instance, 'private')); // true (visibilidad ignorada)
var_dump(property_exists($instance, 'protectedStatic')); // true (visibilidad ignorada)
var_dump(property_exists($instance, 'instanced')); // true (propiedad dinámica en la instancia)
var_dump(property_exists($instance, 'undefined')); // false (no declarada, __isset ignorado)
var_dump(property_exists(MyClass::class, 'public')); // true
var_dump(property_exists(MyClass::class, 'instanced')); // false (las propiedades dinámicas no están en la clase)
var_dump(property_exists(MyClass::class, 'undefined')); // false
?>El ejemplo anterior mostrará:
bool(true) bool(true) bool(true) bool(true) bool(false) bool(true) bool(false) bool(false)
Nota:
El uso de esta función utilizará todos los autoloaders registrados si la clase no es conocida aún.
Nota:
La función property_exists() no puede detectar las propiedades que son accesibles utilizando el método mágico
__get.