← Назад к вопросам

Что такое операция декремент?

1.6 Junior🔥 81 комментариев
#PHP Core

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Операция Декремент

Декремент — это операция, которая уменьшает значение переменной на 1. В PHP обозначается двумя минусами --. Это одна из самых частых операций в программировании, особенно в циклах и при работе со счётчиками.

Два вида декремента

1. Пост-декремент (post-decrement)

$x = 5;
$y = $x--; // Сначала вернёт 5, потом уменьшит на 1
echo $y; // 5
echo $x; // 4

2. Пред-декремент (pre-decrement)

$x = 5;
$y = --$x; // Сначала уменьшит на 1, потом вернёт 4
echo $y; // 4
echo $x; // 4

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

// Декремент на 1
$count = 10;
$count--; // Теперь $count = 9
--$count; // Теперь $count = 8

// Эквивалентно
$count = $count - 1;

Практические примеры

В циклах:

for ($i = 10; $i > 0; $i--) {
    echo "$i "; // Выведет: 10 9 8 7 6 5 4 3 2 1
}

// Обратный отсчёт
function countdown($from) {
    while ($from > 0) {
        echo "$from...\n";
        $from--;
    }
    echo "Лифт!\n";
}

Со счётчиками:

// Уменьшение количества попыток
$attempts = 3;
while ($attempts > 0) {
    if (tryLogin()) {
        echo "Успешно!";
        break;
    }
    $attempts--;
    echo "Осталось попыток: $attempts\n";
}

if ($attempts === 0) {
    echo "Доступ заблокирован\n";
}

С очередями и стеками:

$queue = [1, 2, 3, 4, 5];
$size = count($queue);

// Обработка элементов с конца
while ($size > 0) {
    $item = $queue[--$size]; // Пред-декремент
    echo "Обработан: $item\n";
}

Пост- vs Пред-декремент

Различие в производительности:

// ❌ Медленнее (пост-декремент)
for ($i = 0; $i < 1000000; $i++) {
    // Создаёт временную копию старого значения
}

// ✅ Быстрее (пред-декремент)
for ($i = 0; $i < 1000000; ++$i) {
    // Не создаёт временную копию
}

В бизнес-логике разницы нет:

$count = 10;
$count--; // $count = 9
// vs
function process($items) {
    $remaining = count($items);
    while ($remaining > 0) {
        processItem($items[--$remaining]);
    }
}

Декремент с другими операторами

// Декремент и присвоение
$x = 10;
$x -= 1; // То же самое, что $x--
echo $x; // 9

// Множественный декремент (не существует!)
$x = 10;
$x -= 5; // Уменьшить на 5
echo $x; // 5

// С объектами - перегруженные операторы
class Counter {
    private int $value = 0;
    
    public function __invoke() {
        return --$this->value;
    }
}

Частые ошибки

// ❌ Ошибка: декремент строки
$str = "a";
$str--; // В PHP это не работает для букв

// ✅ Правильно: с числами
$num = 5;
$num--; // 4

// ❌ Ошибка: забыли скобки
$arr = [1, 2, 3];
$val = $arr[--$size]; // Правильно
// $val = $arr[$size--]; // Может быть ошибка: сначала возвращает 3, потом уменьшает

// ✅ Правильно: используй пред-декремент в индексах
$items = ['a', 'b', 'c'];
$index = 2;
echo $items[--$index]; // 'b' (index стал 1)

Когда использовать

  • Циклы с обратным отсчётомfor ($i = 10; $i > 0; $i--)
  • Счётчики и попытки — уменьшение оставшихся операций
  • Очереди и стеки — обработка элементов с конца
  • Таймеры и обратные отсчёты — уменьшение времени
  • Игровая логика — здоровье персонажа, боеприпасы

Связь с инкрементом

// Инкремент (++) — увеличение на 1
$x = 5;
$x++; // 6

// Декремент (--) — уменьшение на 1
$y = 5;
$y--; // 4

// Оба часто используются в вычислениях
function fibonacci($n) {
    $a = 0;
    $b = 1;
    while ($n-- > 0) {
        $temp = $a + $b;
        $a = $b;
        $b = $temp;
    }
    return $a;
}