srand()
Рассмотрим функцию srand() в PHP, которая использовалась для инициализации генератора случайных чисел.
Функция srand() в PHP использовалась для инициализации генератора случайных чисел. Важно: эта функция была признана устаревшей в PHP 7.1 и полностью удалена в PHP 8.0. В данном руководстве описывается её историческое поведение и показывается, как добиться тех же результатов в современном PHP.
Что такое функция srand()?
Функция srand() — это встроенная функция PHP, которая инициализировала генератор случайных чисел с помощью заданного начального значения. Она принимала необязательный целочисленный параметр $seed и возвращала void. При указании начального значения генератор производит предсказуемую последовательность чисел, что удобно для тестирования или воспроизводимых симуляций.
Как использовать функцию srand() (устаревший PHP < 7.1)
Использование srand() в старых версиях PHP было простым. Вот как это работало:
⚠️ Уведомление об устаревании: Этот пример предназначен для устаревших сред PHP (версий до 7.1). Запуск этого кода на PHP 7.1+ приведёт к фатальной ошибке.
Пример (устаревший код)
В этом примере srand(123) инициализирует генератор. Последующие вызовы rand() будут производить одну и ту же последовательность чисел каждый раз при запуске скрипта с этим начальным значением. Именно в этом детерминизме — а не в случайности — и заключался смысл инициализации: она позволяла воспроизводить «случайную» последовательность по требованию для модульного тестирования, воспроизведения событий в играх или отладки.
Вызов srand() без аргумента (или, начиная с PHP 4.2.0, полный отказ от его вызова) инициализировал генератор значением, которое сложно предсказать, поэтому каждый запуск производил разную последовательность.
Современные альтернативы в PHP
Поскольку srand() и rand() удалены в PHP 8.0, используйте следующие современные функции:
random_int(): Рекомендуется для большинства случаев. Генерирует криптографически безопасные случайные целые числа и не требует ручной инициализации.mt_rand(): Работает быстрее, чемrandom_int(), но не является криптографически безопасной. PHP 7.1+ автоматически инициализирует алгоритм Вихря Мерсенна, поэтому ручная инициализация практически не нужна.
Если вам всё же нужна воспроизводимая последовательность для тестирования — основная причина использования srand() — явно инициализируйте генератор Вихря Мерсенна с помощью mt_srand() перед вызовом mt_rand(). Чтобы узнать максимальное значение, которое могут вернуть эти функции, смотрите mt_getrandmax().
Современный пример
<?php
// Generate a cryptographically secure random integer between 1 and 100
$result = random_int(1, 100);
echo $result;
?>Заключение
Функция srand() — это устаревший инструмент, удалённый из современного PHP. Для текущих проектов используйте random_int() для безопасных случайных чисел или mt_rand() для общих задач генерации случайных чисел. Данное руководство поможет вам перенести устаревший код и освоить современный подход к генерации случайных чисел в PHP.