Ответ
Вместо генерации булевых значений нужно использовать функцию, возвращающую целое число в диапазоне [1, 3].
Прямой подход с random_int() (криптографически безопасный):
function getRandomNumberOneToThree(): int {
return random_int(1, 3);
}
Обобщенная реализация для любого диапазона:
/**
* Генерирует случайное целое число в диапазоне [min, max] включительно.
*/
function getRandomIntInRange(int $min, int $max): int {
if ($min > $max) {
throw new InvalidArgumentException('Минимум не может быть больше максимума');
}
return random_int($min, $max);
}
// Использование для нашей задачи
$randomValue = getRandomIntInRange(1, 3); // 1, 2 или 3
Почему random_int(), а не rand() или mt_rand()?
random_int()криптографически безопасен и подходит для задач, где важна непредсказуемость.- Генерирует криптографически стойкие псевдослучайные числа.
- Включает оба граничных значения.
Оптимизация для частых вызовов (PHP 8.2+):
// Создаем экземпляр Randomizer один раз
$randomizer = new RandomRandomizer();
// Многократное использование
$value1 = $randomizer->getInt(1, 3);
$value2 = $randomizer->getInt(1, 3);