my Geek::Story;

29/09/2008

29/09/2008

Filed under: — guedou @ 23:51
  $zero = 0;
  if ($zero == False)
    echo "Je suis égal à zéro.";
  else
    echo "Je NE suis PAS égal à zéro.";

Hasard de tous les hasards (et contre tout bon sens) ce code PHP affiche Je suis égal à zéro. Pour corriger le problème, il faut tester le type de la variable et vérifier que l’on manipule bien un booléen.

  $zero = 0;
  if (is_bool($zero) && $zero == False)
    echo "Je suis égal à zéro.";
  else
    echo "Je NE suis PAS égal à zéro.";

Faudra m’expliquer à quoi ça sert d’avoir un type booléen et un type entier si c’est pour caster silencieusement comme un tocard … Merci PHP, Merci.

18 responses to “29/09/2008”

  1. dun4n says:

    Si tu veux pleurer :

    $array = array();
    if ($array == false) echo “array == false”;
    if ($array == null) echo “array == null”;
    if ($array != 0) echo “array != 0”;
    if (false == 0) echo “false == 0 && array == false && array != 0”;

    :)

  2. guedou says:

    sympathique et tellement intuitif !

    PHP est décidément un langage de comiques …

  3. dun4n says:

    Imagine maintenant la galère pour t’interfacer avec un service XML RPC écrit en PHP qui cast des listes vides en boolean … Avec PHP une méthode peut avoir plusieurs signatures !

  4. guedou says:

    argl ! je repars faire du Python :)

  5. dun4n says:

    Groovy peut aussi être ton ami hein ! :)

  6. guedou says:

    et pour de vrai, ca va plus vite que du Java ?

  7. dun4n says:

    Non mais oh ! Faut arrêter avec “Java c’est lent” … Faut pas confondre Java et Applet Java des années 90.
    Groovy est surtout moins verbeux, beaucoup moins verbeux ! C’est du script après tout :)

  8. guedou says:

    pardon, toutes mes confuses : “la JVM est lente et bouffe plus de RAM qu’il n’y a d’espace disque sur mon iPhone” =)

    ceci dit, sans troller, j’ai récemment essayé les *parseurs XML les plus rapides du monde* écrit en Java, et bien c’est juste lent et ça bouffe plein de RAM. Et surtout, ils sont infoutus de parser un bête fichier de 2,4 Go sans tuer la machine sur laquelle ils tournent.
    Résultat, j’ai parsé en C avec la libexpat et ça torche. En Python, cElementTree enterre aussi tout ce que j’ai pu essayer.

  9. dun4n says:

    Que veux-tu répondre à ça … On passe d’une solution de VM à du natif :( T’auras jamais les mêmes perfs, tu le sais bien !
    Maintenant si avec ta JVM tu fais tomber une machine y a de quoi se poser des questions sur le principe même de la VM …
    Un jour peut être on ira dans un pub avec Sail & Bozze pour en discuter :D

  10. guedou says:

    Je voulais juste illustrer le dilemme du tout Java. Au final, on se retrouve bien trop souvent avec des usines à gaz qui n’avancent pas. Et c’est dommage.

    On pourra éventuellement aller boire une binouze, mais j’espère qu’on pourra parler d’autres chose que de vieux trolls fumants :)

  11. dun4n says:

    Bien souvent les problèmes avec Java viennent des développeurs, hormis le fait que le langage est très verbeux et lourd à implémenter :)
    Non mais quand je suis dans un pub je parle le “pub”, sans rapport aucun avec l’info :)

  12. guedou says:

    de là à dire que le Java attire les mauvais développeurs, il n’y a qu’un pas (de troll ?). ceci dit, c’est à peine faux : c’est le langage que l’on m’a le plus enseigné durant ma scolarité, et parfois de façon étonnante …

  13. dun4n says:

    Je vais t’acheter des bottes de 7 lieux de troller :)
    Dans la société où je bossais avant on cherchait en vain à recruter un “bon” développeur Java. Démarchés par les SSII on a pu voir des “experts” Java qui développaient comme fin ’90. Le problème est que Java a beaucoup évolué en quelques années, ce qui n’est plus forcément le cas maintenant, et que beaucoup de gens se sont reposés sur leur “maîtrise” du langage. Mais au-delà de Java il y a un véritable problème de compétences en Objet et Design Pattern …

  14. guedou says:

    viens-tu de trouver une explication plus que plausible justifiant que l’on cherche encore des développeurs COBOL ?
    même les plus mauvais peuvent coder avec ce language =)

  15. Michel Arboi says:

    En NASL comme en C, il n’y a pas de type booléen.
    NASL c’est bon, mangez en!

  16. guedou says:

    mais le NASL, c’est plein de perlisme !

  17. Stéphane says:

    Il y a plus simple pour résoudre ce genre de problème en PHP, on peut utiliser les opérateurs === et !== :

    1. $zero = 0;
    2. if ($zero === False)
    3. echo “Je suis égal à zéro.”;
    4. else
    5. echo “Je NE suis PAS égal à zéro.”;

  18. guedou says:

    c’est quand même surprenant de rajouter un opérateur alors qu’il suffirait de ne pas caster un booléen en entier. les développeurs de PHP m’étonneront toujours.