Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

isset(), empty() et les méthodes magiques

<?php

class x {
    private array $config = array();
    
    function __isset($name) {
            print __METHOD__." ".$name.PHP_EOL;
        return isset($this->config[$name]);
    }

        function __get($name) {
            print __METHOD__." ".$name.PHP_EOL;
            return 'a';
    }

}


$x = new x;
var_dump(isset($x->a));
var_dump(empty($x->a));

Les méthodes __isset() et __get() doivent aller de pair. L’une vérifie qu’une propriété, virtuelle ou non, est disponible, et l’autre renvoie la valeur réelle. Pourtant, les deux peuvent être incohérentes l’une par rapport à l’autre.

En particulier, __isset() est appelée lors de l’utilisation de isset() et empty().

Mais __get() peut être appelée directement, et renvoyer quelque chose, même si __isset() indique que la valeur n’est pas définie.

Cela peut surprendre les portions de code qui comparent une propriété avec == '' (ou équivalent), par rapport à l’utilisation de isset().

Au-delà de l’illustration étrange, il est probablement bonne pratique de toujours fournir __isset() sur une classe qui possède la méthode magique __get.

See Also

PHP Features

Last updated: 11 October 2026