Prenons la classe suivante :
class foo{
private $bar = 1;
public function __get($name){
if( isSet($this->$name) )
return $this->$name;
else
return null;
}
public function isEmpty(){
if( empty($this->bar) )
return true;
return false;
}
}
Le but est de tester l'attribut bar en vérifiant qu'il n'est pas vide. Pour ce faire j'ai donc codé ceci :
$obj = new foo();
var_dump($obj->bar);
echo $obj->bar . '<br />';
if( empty($obj->bar) )
echo 'bar = empty';
else
echo 'bar = !empty';
echo '<br />';
if( $obj->isEmpty() === true )
echo 'bar = isEmpty()';
else
echo 'bar = !isEmpty()';
Et dont voici le résultat d’exécution :
var_dump() et echo sont donc capable d'accéder à l'attribut bar.int 1
1
bar = empty
bar = !isEmpty()
La fonction empty native à PHP en est par contre dans l'incapacité si elle n'est pas utilisée à l'intérieur même de l'objet.
Quelqu'un saurait-il le pourquoi du comment ?