J'ai remarqué un petit truc aujourd'hui sur php et qui est assez vicieux :
<?php
$nb1="00000001";
$nb2="0001";
if($nb1==$nb2)
echo "$nb1=$nb2\r\n";
else
echo "$nb1!=$nb2\r\n";
if(strval($nb1)==strval($nb2))
echo strval($nb1)."=".strval($nb2)."\r\n";
else
echo strval($nb1)."!=".strval($nb2)."\r\n";
if($nb1===$nb2)
echo "$nb1=$nb2\r\n";
else
echo "$nb1!=$nb2\r\n";
?>
Ceci produit :
00000001=0001
00000001=0001
00000001!=0001
Etonnant non ? Je n'avais jamais remarqué ce comportement perso. En général ça se produit plus dans l'autre sens où il interprète un nombre comme une chaîne et où on est obligé de coller un intval().
Donc en gros il y a vraiment intérêt d'utiliser le triple = quand on bosse sur des chaînes avec des nombres dedans et des 0 au début (du binaire par exemple

).
Ca m'a rendu fou un bon moment cette connerie...
Autant je comprends la première égalité parce qu'il doit interpréter des nombres, autant la deuxième me laisse perplexe ou alors je ne comprends pas bien le rôle de strval()...
Si quelqu'un a une explication au pourquoi ça marche pas avec les strval() je suis preneur.
Question bonus : sur quelle épreuve est-ce que je me prenais la tête ?

j/k