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

PHP поддерживает префиксные и постфиксные операторы инкремента и декремента. Эти унарные операторы разрешают увеличивать или уменьшать значение на единицу.

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

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

<?php

echo 'Постфиксный инкремент:', PHP_EOL;
$a = 5;
var_dump($a++);
var_dump($a);

echo
'Префиксный инкремент:', PHP_EOL;
$a = 5;
var_dump(++$a);
var_dump($a);

echo
'Постфиксный декремент:', PHP_EOL;
$a = 5;
var_dump($a--);
var_dump($a);

echo
'Префиксный декремент:', PHP_EOL;
$a = 5;
var_dump(--$a);
var_dump($a);

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

 Постфиксный инкремент: int(5) int(6) Префиксный инкремент: int(6) int(6) Постфиксный декремент: int(5) int(4) Префиксный декремент: int(4) int(4) 
Внимание

Операторы инкремента и декремента не влияют на логические значения (bool). Начиная с PHP 8.3.0 вызывается ошибка уровня E_WARNING, потому что в будущем это будет неявно приведено к значению целого числа (int).

Оператор декремента не влияет на значения null. Начиная с PHP 8.3.0 вызывается ошибка уровня E_WARNING, потому что в будущем это будет неявно приведено к значению целого числа (int).

Оператор декремента не влияет на не- числовые строки. Начиная с PHP 8.3.0 вызывается ошибка уровня E_WARNING, потому в будущем будет выбрасываться исключение TypeError.

Замечание:

Внутренние объекты, которые поддерживают перегрузку сложения и/или вычитания, могут также быть инкрементированы и/или декрементированы. Один такой внутренний объект — это GMP.

Функция увеличения строки PERL

Внимание

Начиная с PHP 8.3.0 эта функция мягко устарела. Вместо этого вызывают функцию str_increment().

В PHP можно инкрементировать не- числовую строку. Строка должна быть буквенно-цифровой последовательностью в кодировке ASCII. Буквы увеличиваются до следующей буквы, при достижении буквы Z инкремент переносится в следующий разряд слева. Например, выражение $a = 'Z'; $a++; превратит значение переменной $a в значение «AA».

Пример #1 Пример увеличения строки PERL

<?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 
Внимание

Если буквенно-цифровая строка может быть интерпретирована как числовая строка, она будет приведена к типу int или float. Эта проблема встаёт особенно остро со строками, которые выглядят как числа с плавающей точкой, записанные в научной нотации. Функция str_increment() не страдает от эти неявных приведений типов.

Пример #2 Буквенно-цифровая строка, преобразованная в число с плавающей точкой

<?php

$s
= "5d9";
var_dump(++$s);
var_dump(++$s);

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

 string(3) "5e0" float(6) 

Так происходит потому, что значение «5e0» было интерпретировано как число с плавающей точкой (float) и приведено к значению 5.0 перед началом увеличения.

To Top