Операторы инкремента и декремента
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).
Попытка инкремента/декремента других символьных переменных не
будет иметь никакого эффекта, исходная строка останется
неизменной.
Пример #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
Инкрементирование или декрементирование булевых переменных не приводит ни к какому результату.