CakeFest 2024: The Official CakePHP Conference

Operatori di incremento/decremento

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 risultato 1.

Operatori di incremento/decremento
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.

add a note

User Contributed Notes 1 note

up
69
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