PHP supporta lo stile C degli operatori di pre- e post-incremento e decremento.
Nota: Gli operatori di incremento e decremento agiscono solo su numeri e stringhe. Array, oggetti, booleani e risorse non ne sono interessati. Anche decrementare il valore
null
non ha effetti, ma incrementarlo darà come risultato1
.
Esempio | Nome | Effetto |
---|---|---|
++$a | Pre-incremento | Incrementa $a di una unità, quindi restituisce $a. |
$a++ | Post-incremento | Restituisce $a, quindi incrementa $a di una unità. |
--$a | Pre-decremento | Decrementa $a di una unità, quindi restituisce $a. |
$a-- | Post-decremento | Restituisce $a, quindi decrementa $a di una unità. |
Un semplice script di esempio:
<?php
echo "<h3>Postincrement</h3>";
$a = 5;
echo "Dovrebbe essere 5: " . $a++ . "<br />\n";
echo "Dovrebbe essere 6: " . $a . "<br />\n";
echo "<h3>Pre-incremento</h3>";
$a = 5;
echo "Dovrebbe essere 6: " . ++$a . "<br />\n";
echo "Dovrebbe essere 6: " . $a . "<br />\n";
echo "<h3>Post-decremento</h3>";
$a = 5;
echo "Dovrebbe essere 5: " . $a-- . "<br />\n";
echo "Dovrebbe essere 4: " . $a . "<br />\n";
echo "<h3>Pre-decremento</h3>";
$a = 5;
echo "Dovrebbe essere 4: " . --$a . "<br />\n";
echo "Dovrebbe essere 4: " . $a . "<br />\n";
?>
Il PHP segue le convenzioni di Perl e non del C quando tratta le operazioni matematiche
sui caratteri. Ad esempio, in PHP e Perl
$a = 'Z'; $a++;
modifica $a
in 'AA'
, mentre in C
a = 'Z'; a++;
modifica a
in '['
(il valore ASCII di 'Z'
è 90, quello di '['
è 91).
Si noti che le variabili carattere possono essere incrementate ma non decrementate e
anche in questo caso solo i caratteri e i numeri ASCII (a-z, A-Z e 0-9) sono supportati.
Incrementare/decrementare altre variabili di carattere non ha effetto, la
stringa originale non viene modificata.
Example #1 Operazioni aritmetiche su variabili carattere
<?php
echo '== Alphabets ==' . PHP_EOL;
$s = 'W';
for ($n=0; $n<6; $n++) {
echo ++$s . PHP_EOL;
}
// I caratteri numerici si comportano diversamente
echo '== Digits ==' . 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;
}
?>
Il precedente esempio visualizzerà:
== Characters == X Y Z AA AB AC == Digits == A9 B0 B1 B2 B3 B4 A09 A10 A11 A12 A13 A14
Incrementare o decrementare valori booleani non ha effetto.