W3docs

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+ приведёт к фатальной ошибке.

Пример (устаревший код)

php— editable, runs on the server

В этом примере 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.

Практика

Практика
Какова функция srand() в PHP?
Какова функция srand() в PHP?
Was this page helpful?