Les entiers

Un entier est un nombre appartenant � la classe Z = {..., -2, -1, 0, 1, 2, ...}.

Voir aussi :

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.

Avertissement

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_dump0xffffffff );
// Affiche : float(4294967295)

// N'est pas vrai pour les h�xad�cimaux sup�rieures � 2^32-1:
var_dump0x100000000 );
// Affiche : int(2147483647)

$million 1000000;
$large_number =  50000 $million;
var_dump($large_number);
// Affiche : float(50000000000)
?>
Avertissement

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 !

Avertissement

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

Attention

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.