Random\Engine::generate
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
Random\Engine::generate
Референца за `random-engine.generate.php` со подобрена типографија и навигација.
Random\Engine::generate
(PHP 8 >= 8.2.0)
Random\Engine::generate — Генерира случајност
= NULL
Враќа случајност и го поместува стационарниот дел на алгоритмот за еден чекор.
Случајноста е претставена со бинарна низа што содржи случајни бајти. Оваа репрезентација овозможува недвосмислено толкување на случајните битови генерирани од алгоритмот, на пример за да се приспособат различни големини на излез што ги користат различни алгоритми.
Алгоритмите што работат на цел број вредности треба да го вратат целиот број во редослед на бајти од мал крај, на пример со искористување на pack() функција со
P форматниот код. Интерфејсот на високо ниво обезбеден од
Random\Randomizer ќе ги толкува вратените случајни бајти како потпишани цели броеви од мал крај ако е потребна нумеричка репрезентација.
Силно се препорачува секој бит од вратената низа да биде униформно и независно избран, бидејќи некои апликации бараат случајност базирана на ниво на бит за да работат правилно. На пример, линеарните конгруентни генератори често генерираат случајност од понизок квалитет за помалку значајните битови на вратениот цел број и затоа не би биле соодветни за апликации што бараат случајност на ниво на бит.
Параметри
Оваа функција нема параметри.
Вратени вредности
Низа што не е празна и содржи случајни бајти.
Забелешка: На Random\Randomizer работи со потпишани 64-битни цели броеви внатрешно. Ако вратената низа содржи повеќе од 64 бита (8 бајти) случајност, прекумерните бајти ќе бидат игнорирани. Други апликации можеби ќе можат да обработат повеќе од 64 бита одеднаш.
Errors/Exceptions
- Ако генерирањето случајност не успее, треба да се фрли Random\RandomException Секој друг Исклучок фрлен за време на генерирањето треба да биде фатен и завиткан во Random\RandomException.
- Ако вратената низа е празна, Random\BrokenRandomEngineError ќе биде фрлен од Random\Randomizer.
- Ако имплементираниот алгоритам е сериозно пристрасен, Random\BrokenRandomEngineError може да биде фрлен од Random\Randomizer to prevent infinite loops if rejection sampling is required to return unbiased results.
Примери
Пример #1 s фрлени од example
<?php
/**
* Implements a Linear Congruential Generator with modulus 65536,
* multiplier 61 and increment 17 returning an 8 Bit integer.
*
* Note: This engine is suitable for demonstration purposes only.
* Linear Congruential Generators generally generate low
* quality randomness and this specific implementation has
* a very short 16 Bit period that is unsuitable for
* almost any real-world use case.
*/
final class LinearCongruentialGenerator implements \Random\Engine
{
private int $state;
public function __construct(?int $seed = null)
{
if ($seed === null) {
$seed = random_int(0, 0xffff);
}
$this->state = $seed & 0xffff;
}
public function generate(): string
{
$this->state = (61 * $this->state + 17) & 0xffff;
return pack('C', $this->state >> 8);
}
}
$r = new \Random\Randomizer(
new LinearCongruentialGenerator(seed: 1)
);
echo "Lucky Number: ", $r->getInt(0, 99), "\n";
?>Пример #1 Пример што покажува затворачка ознака што го опфаќа последниот нов ред
Lucky Number: 4