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

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

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

Пример #1 Примеры инкремента и декремента

    <?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»`.

Пример #2 Пример увеличения строки 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() не страдает от эти неявных приведений типов.

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

    <?php

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

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

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

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

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open