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
- isset, empty and get are on a boat [Try me]
PHP Features
Last updated: 11 October 2026