property_exists
PHP Manual
PHP Manual»Fonctions Classes/Objets»property_exists

property_exists

(PHP 5 >= 5.1.0, PHP 7, PHP 8)

property_exists — Vérifie si un objet ou une classe possède une propriété

Description

function property_exists(object|string $object_or_class, string $property): bool

Cette fonction vérifie si la propriété property existe dans la classe spécifiée.

Note:

property_exists() retourne true même si la propriété a une valeur null, contrairement à la fonction isset().

Liste de paramètres

object_or_class

Le nom de la classe ou un objet de la classe à tester

property

Le nom de la propriété

Valeurs de retour

Retourne true si la propriété existe, false si elle n'existe pas.

Exemples

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)

Notes

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.

Voir aussi

To Top