Les entiers
Un entier est un nombre appartenant � la classe Z = {..., -2, -1, 0, 1, 2, ...}.
Voir aussi :
- Les entiers de longueur arbitraire / GMP
- Les nombres � virgule flottante
- Les pr�cisions arbitraires / BCMath
Syntaxe
Les entiers peuvent �tre sp�cifi�s en notation d�cimale (base 10), hexad�cimale (base 16), ou octale (base 8), optionnellement pr�c�d�e d'un signe (- ou +).
Pour utiliser la notation octale, pr�c�dez le nombre d'un 0 (z�ro). Pour utiliser la notation hexad�cimale, pr�c�dez le nombre d'un 0x.
Exemple #1 Les entiers litt�raux
<?php
$a = 1234; // un nombre d�cimal
$a = -123; // un nombre n�gatif
$a = 0123; // un nombre octal (�quivalent � 83 d�cimales)
$a = 0x1A; // un nombre h�xadecimal (�quivalent � 26 d�cimales)
?>
Formellement, la structure d'un entier litt�ral est :
decimal : [1-9][0-9]* | 0 hexadecimal : 0[xX][0-9a-fA-F]+ octal : 0[0-7]+ integer : [+-]?decimal | [+-]?hexadecimal | [+-]?octal
La taille d'un entier est d�pendant de la plate-forme, cependant, une valeur maximale d'environ 2 milliards est habituelle (cela correspond � 32 bits sign�s). PHP ne supporte pas les entiers non-sign�s. La taille d'un entier peut �tre d�termin�e en utilisant la constante PHP_INT_SIZE, et la valeur maximale, en utilisant la constante PHP_INT_MAX depuis PHP 4.4.0 et PHP 5.0.5.
Si un nombre invalide est fourni dans un entier octal (i.e. 8 ou 9), le reste du nombre est ignor�.
Exemple #2 Bizarrerie avec les octales
<?php
var_dump(01090); // 010 octal = 8 d�cimales
?>
D�bordement d'entier
Si PHP rencontre un nombre sup�rieur au maximal d'un entier, il sera interpr�t� comme un nombre d�cimal. De la m�me fa�on, une op�ration qui r�sulte en un nombre sup�rieur au nombre maximal d'un entier, retournera un nombre d�cimal.
<?php
$large_number = 2147483647;
var_dump($large_number);
// Affiche : int(2147483647)
$large_number = 2147483648;
var_dump($large_number);
// Affiche : float(2147483648)
// c'est vrai �galement pour les h�xad�cimaux compris entre 2^31 et 2^32-1:
var_dump( 0xffffffff );
// Affiche : float(4294967295)
// N'est pas vrai pour les h�xad�cimaux sup�rieures � 2^32-1:
var_dump( 0x100000000 );
// Affiche : int(2147483647)
$million = 1000000;
$large_number = 50000 * $million;
var_dump($large_number);
// Affiche : float(50000000000)
?>
Malheureusement, il y a un bogue dans PHP qui fait que ceci ne fonctionne pas toujours correctement, lorsque des nombres n�gatifs sont demand�s. Par exemple, le r�sultat de -50000 * $million est -429496728. Cependant, lorsque les 2 op�randes sont positives, il n'y a aucun probl�me.
Ceci a �t� r�solu en PHP 4.1.0.
Il n'y a pas d'op�rateur de division enti�re en PHP. 1/2 contient en fait, float(0.5). La valeur peut �tre convertie en un entier en l'arrondissant, en utilisant la fonction round().
<?php
var_dump(25/7); // float(3.5714285714286)
var_dump((int) (25/7)); // int(3)
var_dump(round(25/7)); // float(4)
?>
Conversion en entier
Pour convertir explicitement une valeur en un entier, utilisez soit le mot cl� (int), soit (integer). Cependant, dans la plupart des cas, ce mot cl� n'est pas n�cessaire vu qu'une valeur sera automatiquement convertie si un op�rateur, une fonction ou une structure de contr�le demande un entier en guise d'argument. Une valeur peut �galement �tre convertie en un entier en utilisant la fonction intval().
Voir aussi : le transtypage.
Depuis un bool�en
FALSE correspond � 0 (z�ro), et TRUE correspond � 1 (un).
Depuis un nombre � virgule flottante
Lorsque l'on convertit un nombre d�cimal en un entier, le nombre sera arrondi vers z�ro.
Si le nombre � virgule flottante est au del� des limites des entiers (habituellement, +/- 2.15e+9 = 2^31), le r�sultat sera ind�fini, sachant que le nombre � virgule flottante n'a pas une pr�cision suffisante pour donner un r�sultat entier exact. Aucune alerte n'est �mise lorsque ce comportement survient !
Ne convertissez jamais une fraction inconnue en un entier, ceci peut engendrer un r�sultat inattendu.
<?php
echo (int) ( (0.1+0.7) * 10 ); // Affiche 7 !
?>
Voir aussi la section sur les alertes concernant la pr�cision des nombres � virgule flottante.
Depuis des cha�nes de caract�res
Voir la section sur la conversion des cha�nes en nombres
Depuis d'autres types
Le comportement de la conversion en un entier est ind�fini depuis les autres types. Ne rapporter aucun comportement observ�, sachant qu'ils peuvent changer sans avertissement.