Mes impressions sur le web, les standards et autres…


Jeudi 9 mars 2006

PHP5, getter et empty()

Je viens de constater une chose étrange avec PHP5. Si la valeur d’une propriété d’un objet est récupérée par le biais de la méthode magique __get(), cette propriété est toujours considérée comme vide lorsqu’on la teste avec empty() :


class Test {
    private $_foo = 'bar';
    
    public function __get($name)
    {
        if( $name == 'foo' ) {
            return $this->_foo;
        }
    }
}

$test = new Test();
echo $test->foo;// affiche bien 'bar'
var_dump(empty($test->foo));// affiche bool(true) ?!

Il y a probablement une logique interne derrière ce comportement surprenant, mais basiquement, on s’attend simplement à ce que empty() nous dise si la variable ou l’attribut testé est vide ou pas, point barre. Cela fait partie de ces comportements vicieux qu’a parfois PHP.

Dans la même veine, on a le résultat d’une comparaison non stricte entre un entier et une chaîne (par exemple issue de $_POST) :


$var1 = 1;
$var2 = '1textQuelconque';

var_dump($var1 == $var2);

…affichera 'bool(true)'. Et oui… C’est déjà plus logique, si l’on veut, mais c’est tout aussi vicieux. Attention donc, quand vous contrôlez les données provenant d’un formulaire. Rappelez-vous que tout ce que vous recevez dans $_GET, $_POST et les autres ont le type 'string' (ou 'array', si vous passez des tableaux), donc faites vos comparaisons exclusivement entre valeur de type 'string', ou bien utilisez intval() et ses amis quand vous attendez des données précises.

Publié à 19h23

Catégorie :

Vos réactions, opinions, insultes…

Rétroliens

Faire un rétrolien sur ce billet : [xxxxxxxx]

Commentaires

Pas de commentaire actuellement

Un ch’tit biscuit ?
  • Les champs email et site sont facultatifs
  • Les URLs commençant par [protocole]://[protocole] correspond à http, https, news, irc, ftp, … sont rendues activables automatiquement. Votre adresse email ainsi que d’éventuelles adresses email présentes dans le corps du commentaire sont également rendues activables et encodées pour tromper les aspirateurs d’adresse email.
  • Pour spécifier une URL locale au site, vous pouvez utiliser local comme protocole à mettre à la place de http et omettre le nom de domaine dans l’URL.
    Exemple : local://2005/08/22/Nom-de-billet/.
  • Usez et abusez de la possibilité de prévisualiser votre commentaire pour vérifier qu’il est correctement rédigé et contient le moins possible de fautes d’orthographe. Évitez en outre le style SMS, merci d’avance. Prévisualiser votre commentaire peut également vous permettre de voir si de nouveaux commentaires sont apparus entre temps.
  • Si vous spécifiez l’adresse de votre site dans le champs texte prévu à cet effet, le script se chargera automatiquement d’aller récupérer sur votre site la langue utilisée dans vos pages, soit via l’en-tête HTTP Content-Language, soit en récupérant le contenu de l’attribut xml:lang ou lang sur l’élément html. Vous n’avez indiqué d’aucune façon la langue utilisée dans vos pages ? Corrigez ça nom di diou !
  • Des options de mise en forme des commentaires feront peut-être un jour leur apparition.


Site créé et maintenu par Aurélien Maille aka Bobe. Toutes les heures sont au format CEST.
Revenir à l’accueil – Zone de développement – Informations et accessibilité – CC licensed CC Licensed