CascadiaPHP 2024

Opérateurs d'incrémentation et décrémentation

Incrémentation et décrémentation

PHP prend en charge les opérateurs de pre- et post- incrémentation et décrémentation. Ces opérateurs unaires permettent d'augmenter ou de diminuer la valeur de un.

Opérateurs d'incrémentation et décrémentation
Exemple Nom Résultat
++$a Pre-incrémente Incrémente $a de 1, puis retourne $a.
$a++ Post-incrémente Retourne $a, puis incrémente $a de 1.
--$a Pré-décrémente Décrémente $a de 1, puis retourne $a.
$a-- Post-décrémente Retourne $a, puis décrémente $a de 1.

Voici un exemple simple :

<?php
echo 'Post-incrément:', PHP_EOL;
$a = 5;
var_dump($a++);
var_dump($a);
echo
'Pre-incrément:', PHP_EOL;
$a = 5;
var_dump(++$a);
var_dump($a);
echo
'Post-décrément:', PHP_EOL;
$a = 5;
var_dump($a--);
var_dump($a);
echo
'Pre-décrément:';
$a = 5;
var_dump(--$a);
var_dump($a);
?>

L'exemple ci-dessus va afficher :

Post-incrément:
int(5)
int(6)
Pre-incrément:
int(6)
int(6)
Post-décrément:
int(5)
int(4)
Pre-décrément:
int(4)
int(4)
Avertissement

Les opérateurs d'incrémentation et de décrémentation n'ont aucun effet sur les valeurs de type bool. Un E_WARNING est émis à partir de PHP 8.3.0, car cela convertira implicitement la valeur en int à l'avenir.

L'opérateur de décrémentation n'a aucun effet sur les valeurs de type null. Un E_WARNING est émis à partir de PHP 8.3.0, car cela convertira implicitement la valeur en int à l'avenir.

L'opérateur de décrémentation n'a aucun effet sur les chaînes non numériques. Un E_WARNING est émis à partir de PHP 8.3.0, car une TypeError sera levée à l'avenir.

Note:

Les objets internes qui prennent en charge la surcharge de l'addition et/ou de la soustraction peuvent également être incrémentés et/ou décrémentés. Un tel objet interne est GMP.

Fonctionnalité d'incrémentation de chaînes PERL

Avertissement

Cette fonctionnalité est obsolète de manière souple à partir de PHP 8.3.0. La fonction str_increment() devrait être utilisée à la place.

Il est possible d'incrémenter une chaîne non numérique dans PHP. La chaîne doit être une chaîne ASCII alphanumérique. Cela incrémente les lettres jusqu'à la lettre suivante, et lorsque la lettre Z est atteinte, l'incrément est reporté à la valeur à gauche. Par exemple, $a = 'Z'; $a++; transforme $a en 'AA'.

Exemple #1 Exemple d'incrémentation de chaîne PERL

<?php
echo '== Chaînes alphabétiques ==' . PHP_EOL;
$s = 'W';
for (
$n=0; $n<6; $n++) {
echo ++
$s . PHP_EOL;
}
// Les chaînes alphanumériques se comportent différemment
echo '== Caractères digitaux ==' . PHP_EOL;
$d = 'A8';
for (
$n=0; $n<6; $n++) {
echo ++
$d . PHP_EOL;
}
$d = 'A08';
for (
$n=0; $n<6; $n++) {
echo ++
$d . PHP_EOL;
}
?>

L'exemple ci-dessus va afficher :

== Chaînes alphabétiques ==
X
Y
Z
AA
AB
AC
== Chaînes alphanumériques ==
A9
B0
B1
B2
B3
B4
A09
A10
A11
A12
A13
A14
Avertissement

Si la chaîne alphanumérique peut être interprétée comme une chaîne numérique, elle sera convertie en int ou en float. C'est particulièrement problématique avec les chaînes qui ressemblent à des nombres à virgule flottante écrits en notation exponentielle. La fonction str_increment() ne souffre pas de ces conversions de type implicites.

Exemple #2 Conversion de chaîne alphanumérique en flottant

<?php
$s
= "5d9";
var_dump(++$s);
var_dump(++$s);
?>

L'exemple ci-dessus va afficher :

string(3) "5e0"
float(6)

Cela est dû au fait que la valeur "5e0" est interprétée comme un float et convertie en la valeur 5.0 avant d'être incrémentée.

add a note

User Contributed Notes 1 note

up
72
hartmut at php dot net
11 years ago
Note that

$a="9D9"; var_dump(++$a); => string(3) "9E0"

but counting onwards from there

$a="9E0"; var_dump(++$a); => float(10)

this is due to "9E0" being interpreted as a string representation of the float constant 9E0 (or 9e0), and thus evalutes to 9 * 10^0 = 9 (in a float context)
To Top