PHP supporte les opérateurs de pre- et post-incrémentation et décrémentation, comme en langage C.
Note: Les opérateurs d'incrémentation/décrémentation n'affectent que les nombres et les chaînes de caractères. Les tableaux, objets, booléen et ressources ne sont pas affectées. La décrémentation des valeurs
null
n'a également aucun effet, mais leur incrémentation donnera comme résultat1
.
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 '<h3>Post-incrémentation</h3>';
$a = 5;
echo "Devrait valoir 5: " . $a++ . "<br />\n";
echo "Devrait valoir 6: " . $a . "<br />\n";
echo '<h3>Pre-incrémentation</h3>';
$a = 5;
echo "Devrait valoir 6: " . ++$a . "<br />\n";
echo "Devrait valoir 6: " . $a . "<br />\n";
echo '<h3>Post-décrémentation</h3>';
$a = 5;
echo "Devrait valoir 5: " . $a-- . "<br />\n";
echo "Devrait valoir 4: " . $a . "<br />\n";
echo '<h3>Pre-décrémentation</h3>';
$a = 5;
echo "Devrait valoir 4: " . --$a . "<br />\n";
echo "Devrait valoir 4: " . $a . "<br />\n";
?>
PHP suit les conventions de Perl pour la gestion des opérateurs
arithmétiques sur les variables de caractères et non pas celle du C.
Par exemple, en PHP et en Perl, $a = 'Z'; $a++;
transforme $a
en 'AA'
,
alors qu'en C, a = 'Z'; a++;
transforme
a
en '['
(la valeur ASCII de
'Z'
est 90, la valeur ASCII de '['
est 91). Notez que les variables de caractères peuvent être incrémentés,
mais pas décrémentées, mais aussi que seuls les lettres et chiffres ASCII
(a-z, A-Z et 0-9) sont supportés.
L'incrémentation/décrémentation d'autres variables de caractères n'a
aucun effet, la chaîne originale n'est pas modifiée.
Exemple #1 Opérations arithmétiques sur un caractère
<?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
L'incrémentation ou la décrémentation d'un booléen n'a aucun effet.