W3docs

mt_srand()

Разбираем функцию mt_srand() в PHP — она инициализирует генератор случайных чисел, используемый функцией mt_rand().

Сегодня мы рассмотрим функцию mt_srand() в PHP. Она инициализирует генератор случайных чисел, используемый функцией mt_rand(). Важно: mt_srand() признана устаревшей начиная с PHP 8.1 и удалена в PHP 8.4. В современных PHP-приложениях используйте random_int() или random_bytes().

Что такое функция mt_srand()?

Функция mt_srand() инициализирует генератор случайных чисел Mersenne Twister с заданным значением зерна. При использовании фиксированного зерна mt_rand() производит предсказуемую, воспроизводимую последовательность чисел. Такое детерминированное поведение полезно прежде всего при тестировании, отладке или в ситуациях, когда требуется стабильный случайный вывод.

Как использовать функцию mt_srand()

Использование mt_srand() несложно. Вот базовый пример:

Как использовать функцию mt_srand() в PHP?

php— editable, runs on the server

В этом примере mt_srand(12345) задаёт зерно генератора. Последующие вызовы mt_rand() будут давать одинаковый вывод при каждом запуске, поскольку зерно остаётся неизменным. Результат сохраняется в переменной $result и выводится на экран.

Примечание о совместимости версий: в PHP 8.1+ этот код вызовет предупреждение об устаревшей функциональности. Для PHP 8.4+ и современных проектов замените mt_srand()/mt_rand() на random_int() для безопасной и поддерживаемой генерации случайных чисел.

Современная замена

mt_srand() предназначена для того, чтобы сделать случайность воспроизводимой путём фиксации зерна. Современные криптографически безопасные функции намеренно не поддерживают задание зерна — каждый раз они возвращают непредсказуемые значения:

<?php
// Modern, secure replacement — no seeding required
$result = random_int(1, 100); // a secure random integer between 1 and 100 (inclusive)

echo $result;
?>

Поскольку random_int() использует криптографически безопасный источник операционной системы, её следует применять везде, где важна безопасность (токены, пароли, одноразовые коды). Обратная сторона — отсутствие воспроизводимости: зерно задать нельзя, поэтому один и тот же код никогда не вернёт одно и то же число дважды.

Если вам действительно нужна воспроизводимая последовательность (например, для генерации одинаковых тестовых данных при каждом запуске) в PHP 8.2+, используйте объектно-ориентированный класс \Random\Randomizer с движком Mt19937 вместо устаревшего mt_srand().

Заключение

Несмотря на то что mt_srand() обеспечивает детерминированные случайные последовательности для устаревшего кода или отдельных задач тестирования, она признана устаревшей в PHP 8.1 и удалена в PHP 8.4. Современная разработка на PHP должна использовать random_int() или random_bytes() для безопасной и поддерживаемой генерации случайных чисел. Надеемся, что это руководство прояснило исторический контекст и правильное применение mt_srand() в старых PHP-окружениях.

Практика

Практика
Какова цель функции mt_srand() в PHP?
Какова цель функции mt_srand() в PHP?
Was this page helpful?