Операторы инкремента и декремента

PHP поддерживает префиксные и постфиксные операторы инкремента и декремента в стиле C.

Замечание: Операторы инкремента/декремента влияют только на строки и числа. Массивы, объекты и ресурсы не трогаются. Декремент NULL также не даст никакого эффекта, однако инкремент даст значение 1.

Операторы инкремента и декремента
Пример Название Действие
++$a Префиксный инкремент Увеличивает $a на единицу, затем возвращает значение $a.
$a++ Постфиксный инкремент Возвращает значение $a, затем увеличивает $a на единицу.
--$a Префиксный декремент Уменьшает $a на единицу, затем возвращает значение $a.
$a-- Постфиксный декремент Возвращает значение $a, затем уменьшает $a на единицу.

Приведем пример простого скрипта:

<?php
echo "<h3>Постфиксный инкремент</h3>";
$a 5;
echo 
"Должно быть 5: " $a++ . "<br />\n";
echo 
"Должно быть 6: " $a "<br />\n";

echo 
"<h3>Префиксный инкремент</h3>";
$a 5;
echo 
"Должно быть 6: " . ++$a "<br />\n";
echo 
"Должно быть 6: " $a "<br />\n";

echo 
"<h3>Постфиксный декремент</h3>";
$a 5;
echo 
"Должно быть 5: " $a-- . "<br />\n";
echo 
"Должно быть 4: " $a "<br />\n";

echo 
"<h3>Префиксный декремент</h3>";
$a 5;
echo 
"Должно быть 4: " . --$a "<br />\n";
echo 
"Должно быть 4: " $a "<br />\n";
?>

PHP следует соглашениям Perl (в отличие от С) касательно выполнения арифметических операций с символьными переменными. Например, в PHP и Perl $a = 'Z'; $a++; присвоит $a значение 'AA', в то время как в C a = 'Z'; a++; присвоит a значение '[' (ASCII значение 'Z' равно 90, а ASCII значение '[' равно 91). Следует учесть, что к символьным переменным можно применять операцию инкремента, в то время как операцию декремента применять нельзя, кроме того, поддерживаются только алфавит ASCII и цифры (a-z, A-Z и 0-9). Попытка инкремента/декремента других символьных переменных не будет иметь никакого эффекта, исходная строка останется неизменной.

Пример #1 Арифметические операции с символьными переменными

<?php
echo '== Алфавит ==' PHP_EOL;
$s 'W';
for (
$n=0$n<6$n++) {
    echo ++
$s PHP_EOL;
}
// Цифры ведут себя по другому
echo '== Цифры ==' 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;
}
?>

Результат выполнения данного примера:

== Алфавит ==
X
Y
Z
AA
AB
AC
== Цифры ==
A9
B0
B1
B2
B3
B4
A09
A10
A11
A12
A13
A14

Инкрементирование или декрементирование булевых переменных не приводит ни к какому результату.

Коментарии

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)
2012-08-02 18:28:54
http://php5.kiev.ua/manual/ru/language.operators.increment.html

    Поддержать сайт на родительском проекте КГБ