|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
![]() ![]() Développeur PHP & Architecte logiciel Inscription : mars 2003 Messages : 562 ![]() |
Bonjour tout le monde,
petite question de fond qui me chagrine : Code php :
Ce code fait l'objet de nombreux débats avec mes collègues. Avis 1 : Countable n'est qu'une interface qui permet d'utiliser sizeof/count. Il est normal que empty, dans la mesure où l'objet est un tableau, retourne false. Après tout, un objet est un objet, empty n'a pas la vocation à tester des objets complexe Avis2 : Countable fait partie des interfaces qui permettent de manipuler des objets comme des tableaux (pour arriver par exemple à la classe ArrayIterator). C'est donc qu'il y a une réelle volonté du language de pouvoir s'affranchir de la différence tableau/objet, facilement. Or dans ce cas, on est obligés de faire un test de type: Code :
$empty = (is_object($o) && ($o instanceof Countable)) ? sizeof($o) > 0: empty($o); Dans ce cas, le code source d'empty devrait être revu pour gérer les objets qui implémentent Countable. A votre avis: Bref, si oui empty() est un peu une fonction "bâtarde" (peu fiable, par exemple si on teste une chaine "0"), est-ce qu'il faut revoir la fonction empty() à votre avis, ou bien est normal, conceptuellement, de ne pas utiliser un objet comme un tableau ?
__________________
Zend PHP Certified Engineer tutoriels : tutos PHP, Web & SEO blog : blog.lepine.pro membre de l'AFUP (Association des Utilisateurs de PHP) |
||
|
00
|
|
|
#2 | |||
![]() ![]() Inscription : septembre 2010 Messages : 7 101 ![]() |
Y'a rien de choquant la dedans, c'est marqué en gros dans la doc :
Citation:
le code basique serait : Code :
pour le test un is_object + get_object_vars suffis dans n'importe quelle cas
__________________
http://blog.stealth35.com/ |
|||
|
|
00
|
|
|
#3 |
![]() ![]() Benjamin DelespierreDéveloppeur Web Inscription : février 2010 Messages : 2 984 ![]() |
C'est une question épineuse, mais ce n'est pas un cas isolé. J'aime bien lire et relire cet article qui fait le tour de la question: http://blog.roshambo.org/20-possible...ers-are-weird/
Concernant sa fiabilité, je te renvoie vers un autre article: http://11heavens.com/true-or-false-in-php Pour moi, utiliser un objet comme un tableau n'est pas vraiment une erreur mais ce n'est pas non plus nécessaire. Dès lors qu'un objet est traversable, on a ce qu'on voulait au final, si on peut lui coller un iterateur par dessus c'est encore mieux. L'adresser comme un tableau, personnellement je suis plutôt contre, je préfère l'usage de __get et __set pour les utiliser comme des structures. On en parlait avec un collègue, les tableaux sont-ils des tree ? des hashmaps ? Un peu des deux ? Le comportement étrange des tableaux natif en PHP qui les faits se comporter comme des piles, des files, des listes chainées, des iterateurs etc. rends ce type de données obscur. Je lui préfère largement un modèle objet cohérent où chaque classe fait son job: SplStack, Iterator, SplQueue etc. Quand à empty, chez moi ça se limite à isEmpty()
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même). Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...". Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug. Les boutons et existent, servez-vous en
|
|
00
|
Copyright © 2000-2012 - www.developpez.com