Les entiers
Un &integer; est un nombre appartenant à l'ensemble
ℤ = {..., -2, -1, 0, 1, 2, ...}.
&reftitle.seealso;
Les nombres à virgule flottanteLes précisions arbitraires / BCMathLes entiers de longueur arbitraire / GMPSyntaxe
Les &integer;s peuvent être spécifiés en notation décimale (base 10), hexadécimale
(base 16), octale (base 8), ou binaire (base 2).
L'opérateur de négation
peut être utilisé pour désigner un &integer; négatif.
Pour utiliser la notation octale, précédez le nombre d'un 0 (zéro).
À partir de PHP 8.1.0, la notation octale peut être précédée de 0o ou 0O.
Pour utiliser la notation hexadécimale, précédez le nombre de 0x.
Pour utiliser la notation binaire, précédez le nombre de 0b.
À partir de PHP 7.4.0, les entiers littéraux peuvent contenir des underscores
(_) entre les chiffres, pour une meilleure lisibilité
des littéraux. Ces underscores sont supprimés par le scanner de PHP.
Les entiers littéraux
]]>
Formellement, la structure d'un entier littéral est à partir de PHP 8.1.0
(auparavant, les préfixes octaux 0o ou 0O
n'étaient pas autorisés, et avant PHP 7.4.0, les underscores n'étaient pas autorisés) :
La taille d'un &integer; est dépendante de la plate-forme, cependant,
une valeur maximale d'environ 2 milliards est habituelle (cela correspond
à 32 bits signés). Les plateformes 64-bit ont habituellement une valeur
maximale d'environ 9E18.
PHP ne supporte pas les &integer;s non-signés.
La taille d'un &integer; peut être déterminée en utilisant la constante
PHP_INT_SIZE, la valeur maximale, en utilisant
la constante PHP_INT_MAX,
et la valeur minimale en utilisant la constante
PHP_INT_MIN.
Débordement d'entier
Si PHP rencontre un nombre supérieur au maximal d'un &integer;, il sera
interprété comme un &float;. De la même façon, une opération qui résulte en
un nombre en dehors de l'intervalle du type &integer; retournera un &float;.
Dépassement d'entier
]]>
Division d'entier
Il n'y a pas d'opérateur de division d'&integer; en PHP, pour accomplir ceci,
utiliser la fonction intdiv.
1/2 produit le &float; (0.5).
La valeur peut être transtypée en un &integer; pour l'arrondir vers zéro, ou
en utilisant la fonction round pour avoir un contrôle
plus fin sur la façon dont l'arrondi est exécuté.
Division
]]>
Conversion en entier
Pour convertir explicitement une valeur en un &integer;, utiliser
le mot-clé (int).
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 &integer; en guise
d'argument. Une valeur peut également être convertie en un &integer;
en utilisant la fonction intval.
Si une &resource; est convertie vers un &integer;, alors
le résultat sera l'identifiant unique de la &resource; assigné
par PHP à l'exécution.
Voir aussi le transtypage.
Depuis un booléen
&false; correspond à 0 (zéro), et &true; correspond à
1 (un).
Depuis un nombre à virgule flottante
Lors de la conversion d'un &float; en &integer;, le nombre est arrondi
vers zéro.
À partir de PHP 8.1.0, une notification de dépréciation est émise lors de la
conversion implicite d'un &float; non-intégral en &integer; perdant en précision.
Conversion depuis des nombres flottants
]]>
Si le nombre à virgule flottante est au-delà des limites des &integer;s (habituellement,
+/- 2.15e+9 = 2^31 sur les plate-formes 32-bit et
+/- 9.22e+18 = 2^63 sur les plate-formes 64-bit),
le résultat sera indéfini, sachant que le &float; n'a pas une précision
suffisante pour donner un résultat &integer; exact.
Aucune alerte n'est émise lorsque ce comportement survient !
NaN, Inf et -Inf sont toujours égaux à zéro lors d'une conversion en
int.
Ne convertissez jamais une fraction inconnue en un &integer;, ceci peut
engendrer des résultats inattendus.
]]>
Voir aussi la section sur les alertes
concernant la précision des nombres à virgule flottante.
Depuis des chaînes de caractères
Si une chaîne est
numérique
ou numérique de tête alors elle sera transformée en sa valeur entière
correspondante, sinon elle sera convertie en zéro (0).
Depuis NULL
&null; est toujours converti en zéro (0).
Depuis d'autres types
Le comportement de la conversion en &integer; est indéfini depuis les autres types.
Ne rapporter aucun comportement observé, sachant qu'ils peuvent
changer sans avertissement.