Можно ли реализовать бесконечный цикл в PHP?

«Можно ли реализовать бесконечный цикл в PHP?» — вопрос из категории PHP Core, который задают на 24% собеседований PHP Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, бесконечный цикл реализуется стандартными языковыми конструкциями. Основные способы:

// 1. Использование while(true)
while (true) {
    // Тело цикла
    if ($shouldExit) {
        break; // Критически важный механизм выхода
    }
    usleep(100000); // Часто добавляют задержку в долгосрочных циклах
}

// 2. Использование for без условий
for (;;) {
    // Тело цикла
    if ($shouldExit) {
        break;
    }
}

Контекст использования и важные предостережения:

Контекст Особенности
Веб-запрос (FPM, Apache) Цикл будет принудительно прерван по истечении max_execution_time (обычно 30 сек). Это приведет к фатальной ошибке и незавершенному ответу пользователю. Практически никогда не нужно.
CLI-скрипты (командная строка) Основная область применения. Используется для демонов, воркеров очередей, слушателей. Обязательно нужен механизм graceful shutdown (обработка сигналов SIGTERM, SIGINT).
Тестирование/Отладка Может использоваться для симуляции нагрузки или отладки параллельных процессов.

Пример CLI-демона с обработкой сигналов:

declare(ticks=1);
$running = true;

pcntl_signal(SIGTERM, function () use (&$running) {
    $running = false;
    echo "Получен сигнал завершения.n";
});

while ($running) {
    // Проверка новых задач в очереди (например, из Redis или Beanstalkd)
    // $task = $queue->reserve();
    // if ($task) { ... обработать задачу ... }
    sleep(1); // Избегаем busy waiting
}
echo "Демон завершил работу.n";