4 votes

Comportement étrange avec les nombres qui ont un zéro en tête

J'ai un code PHP avec des entiers et tout fonctionne bien, sauf quand j'ai 08 o 0X comme un nombre entier. Tout fonctionne bien lorsque je les mets entre guillemets.

Exemples de chiffres :

2      //Works fine
08     //Doesn't work
012    //Doesn't work
"08"   //Works fine again
"012"  //Works fine again

Quelqu'un peut-il m'expliquer la raison de cette situation ?

13voto

Mark Baker Points 90240

Si vous écrivez simplement 08 et 09 (sans guillemets) ou tout autre numérique avec un 0 en tête, PHP pense que vous écrivez une valeur octale, et 08 et 09 sont des nombres octaux invalides.

http://www.php.net/manual/en/language.types.integer.php

Syntaxe

Les nombres entiers peuvent être spécifiés en décimal (base 10), en hexadécimal (base 16), octal (base 8) ou binaire (base 2), éventuellement précédés d'un signe (- ou +). (- ou +).

Les littéraux entiers binaires sont disponibles depuis PHP 5.4.0.

Pour utiliser notation octale précéder le numéro d'un 0 (zéro). Pour utiliser notation hexadécimale faire précéder le numéro d'un 0x . Pour utiliser binaire notation binaire faire précéder le numéro d'un 0b .

[...]

Attention : Avant PHP 7, si un chiffre invalide était donné dans un entier octal (i.e. 8 ou 9), le reste du nombre était ignoré. Depuis PHP 7, une erreur d'analyse est émise.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X