<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/class.random-engine.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'pt_BR',
  ),
  'this' => 
  array (
    0 => 'random-engine.generate.php',
    1 => 'Random\\Engine::generate',
    2 => 'Gera aleatoriedade',
  ),
  'up' => 
  array (
    0 => 'class.random-engine.php',
    1 => 'Random\\Engine',
  ),
  'prev' => 
  array (
    0 => 'class.random-engine.php',
    1 => 'Random\\Engine',
  ),
  'next' => 
  array (
    0 => 'class.random-cryptosafeengine.php',
    1 => 'Random\\CryptoSafeEngine',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'pt_BR',
    'path' => 'reference/random/random/engine/generate.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="random-engine.generate" class="refentry">
 <div class="refnamediv">
  <h1 class="refname">Random\Engine::generate</h1>
  <p class="verinfo">(PHP 8 &gt;= 8.2.0)</p><p class="refpurpose"><span class="refname">Random\Engine::generate</span> &mdash; <span class="dc-title">Gera aleatoriedade</span></p>

 </div>

 <div class="refsect1 description" id="refsect1-random-engine.generate-description">
  <h3 class="title">Descrição</h3>
  <div class="methodsynopsis dc-description">
   <span class="modifier">public</span> <span class="methodname"><strong>Random\Engine::generate</strong></span>(): <span class="type"><a href="language.types.string.php" class="type string">string</a></span></div>

  <p class="para rdfs-comment">
   Retorna aleatoriedade e avança o estado do algoritmo em uma etapa.
  </p>
  <p class="para">
   A aleatoriedade é representada por uma string binária contendo bytes aleatórios. Esta representação
   permite interpretar de forma inequívoca os bits aleatórios gerados pelo algoritmo, por exemplo, para
   acomodar diferentes tamanhos de saída usados por diferentes algoritmos.
  </p>
  <p class="para">
   Algoritmos que operam nativamente em valores inteiros devem retornar o inteiro na ordem de bytes
   Little-Endian, por exemplo, aproveitando a função <span class="function"><a href="function.pack.php" class="function">pack()</a></span> com o código de formato
   <code class="literal">P</code>. A interface de alto nível fornecida pelo
   <span class="classname"><a href="class.random-randomizer.php" class="classname">Random\Randomizer</a></span> interpretará os bytes aleatórios retornados como inteiros
   Little-Endian sem sinal se uma representação numérica for necessária.
  </p>
  <p class="para">
   É altamente recomendável que cada bit da string retornada seja selecionado de maneira uniforme e
   independente, pois alguns aplicativos exigem aleatoriedade com base no nível de bit para funcionar corretamente.
   Por exemplo, geradores congruentes lineares geralmente geram aleatoriedade de qualidade inferior para os bits
   menos significativos do valor inteiro de retorno e, portanto, não seriam apropriados para aplicações
   que exigem aleatoriedade em nível de bit.
  </p>
 </div>


 <div class="refsect1 parameters" id="refsect1-random-engine.generate-parameters">
  <h3 class="title">Parâmetros</h3>
  <p class="para">Esta função não possui parâmetros.</p>
 </div>


 <div class="refsect1 returnvalues" id="refsect1-random-engine.generate-returnvalues">
  <h3 class="title">Valor Retornado</h3>
  <p class="para">
   Uma string não vazia contendo bytes aleatórios.
  </p>

  <blockquote class="note"><p><strong class="note">Nota</strong>: 
   <span class="simpara">
    A <span class="classname"><a href="class.random-randomizer.php" class="classname">Random\Randomizer</a></span> funciona internamente com inteiros sem sinal de 64 bits.
    Se a string retornada contiver mais de 64 bits (8 bytes) de aleatoriedade, os bytes excedentes
    serão ignorados. Outros aplicativos podem processar mais de 64 bits ao mesmo tempo.
   </span>
  </p></blockquote>
 </div>


 <div class="refsect1 errors" id="refsect1-random-engine.generate-errors">
  <h3 class="title">Erros/Exceções</h3>
  <ul class="itemizedlist">
   <li class="listitem">
    <span class="simpara">
     Se a geração de aleatoriedade falhar, uma <span class="classname"><a href="class.random-randomexception.php" class="classname">Random\RandomException</a></span> deverá
     ser lançada. Qualquer outra <span class="classname"><a href="class.exception.php" class="classname">Exception</a></span> lançada durante a geração deve
     ser capturada e agrupada em uma <span class="classname"><a href="class.random-randomexception.php" class="classname">Random\RandomException</a></span>.
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     Se a string retornada estiver vazia, um <span class="classname"><a href="class.random-brokenrandomengineerror.php" class="classname">Random\BrokenRandomEngineError</a></span>
     será lançado pelo <span class="classname"><a href="class.random-randomizer.php" class="classname">Random\Randomizer</a></span>.
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     Se o algoritmo implementado for severamente tendencioso, um <span class="classname"><a href="class.random-brokenrandomengineerror.php" class="classname">Random\BrokenRandomEngineError</a></span>
     pode ser lançado pelo <span class="classname"><a href="class.random-randomizer.php" class="classname">Random\Randomizer</a></span> para evitar loops infinitos
     se a amostragem de rejeição for necessária para retornar resultados imparciais.
    </span>
   </li>
  </ul>
 </div>


 <div class="refsect1 examples" id="refsect1-random-engine.generate-examples">
  <h3 class="title">Exemplos</h3>
  <div class="example" id="example-1">
   <p><strong>Exemplo #1 Exemplo de <span class="function"><strong>Random\Engine::generate()</strong></span></strong></p>
   <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">/**<br /> * Implementa um Gerador Linear Congruente com módulo 65536,<br /> * multiplicador 61 e incremento 17 retornando um número inteiro de 8 bits.<br /> *<br /> * Nota: Este mecanismo é adequado apenas para fins de demonstração.<br /> * Geradores Congruentes Lineares geralmente geram aleatoriedade<br /> * de baixa qualidade e esta implementação específica tem<br /> * um período muito curto de 16 bits que é inadequado para<br /> * quase todo caso de uso do mundo real.<br /> */<br /></span><span style="color: #007700">final class </span><span style="color: #0000BB">LinearCongruentialGenerator </span><span style="color: #007700">implements </span><span style="color: #0000BB">\Random\Engine<br /></span><span style="color: #007700">{<br />    private </span><span style="color: #0000BB">int $state</span><span style="color: #007700">;<br /><br />    public function </span><span style="color: #0000BB">__construct</span><span style="color: #007700">(?</span><span style="color: #0000BB">int $seed </span><span style="color: #007700">= </span><span style="color: #0000BB">null</span><span style="color: #007700">)<br />    {<br />        if (</span><span style="color: #0000BB">$seed </span><span style="color: #007700">=== </span><span style="color: #0000BB">null</span><span style="color: #007700">) {<br />            </span><span style="color: #0000BB">$seed </span><span style="color: #007700">= </span><span style="color: #0000BB">random_int</span><span style="color: #007700">(</span><span style="color: #0000BB">0</span><span style="color: #007700">, </span><span style="color: #0000BB">0xffff</span><span style="color: #007700">);<br />        }<br /><br />        </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">state </span><span style="color: #007700">= </span><span style="color: #0000BB">$seed </span><span style="color: #007700">&amp; </span><span style="color: #0000BB">0xffff</span><span style="color: #007700">;<br />    }<br /><br />    public function </span><span style="color: #0000BB">generate</span><span style="color: #007700">(): </span><span style="color: #0000BB">string<br />    </span><span style="color: #007700">{<br />        </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">state </span><span style="color: #007700">= (</span><span style="color: #0000BB">61 </span><span style="color: #007700">* </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">state </span><span style="color: #007700">+ </span><span style="color: #0000BB">17</span><span style="color: #007700">) &amp; </span><span style="color: #0000BB">0xffff</span><span style="color: #007700">;<br /><br />        return </span><span style="color: #0000BB">pack</span><span style="color: #007700">(</span><span style="color: #DD0000">'C'</span><span style="color: #007700">, </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">state </span><span style="color: #007700">&gt;&gt; </span><span style="color: #0000BB">8</span><span style="color: #007700">);<br />    }<br />}<br /><br /></span><span style="color: #0000BB">$r </span><span style="color: #007700">= new </span><span style="color: #0000BB">\Random\Randomizer</span><span style="color: #007700">(<br />    new </span><span style="color: #0000BB">LinearCongruentialGenerator</span><span style="color: #007700">(</span><span style="color: #0000BB">seed</span><span style="color: #007700">: </span><span style="color: #0000BB">1</span><span style="color: #007700">)<br />);<br /><br />echo </span><span style="color: #DD0000">"Número da Sorte: "</span><span style="color: #007700">, </span><span style="color: #0000BB">$r</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">getInt</span><span style="color: #007700">(</span><span style="color: #0000BB">0</span><span style="color: #007700">, </span><span style="color: #0000BB">99</span><span style="color: #007700">), </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

   <div class="example-contents"><p>O exemplo acima produzirá:</p></div>
   <div class="example-contents screen">
<div class="annotation-interactive examplescode"><pre class="examplescode">Número da Sorte: 4</pre>
</div>
   </div>
  </div>
 </div>



</div><?php manual_footer($setup); ?>