AllesMeins: mt_srand funktionen übergreifend?

Hiho,

eine kleine Frage: Ist mt_srand() funktionenübergreifend, sprich reicht es wenn ich es oben in das Hauptscript einbaue oder muss der Kram in jede Funktion mit rein?

Grüsse

Marc

  1. Halihallo AllesMeins

    eine kleine Frage: Ist mt_srand() funktionenübergreifend, sprich reicht es wenn ich es oben in das Hauptscript einbaue oder muss der Kram in jede Funktion mit rein?

    (mt_|)srand() ist funktionsübergreifend. Es muss (ja sogar: sollte)
    nur einmal am Script-Start aufgerufen werden. Alles andere ist reine
    Performanceverschwendung und wird bei (sehr) alten PHP-Versionen
    sogar zur Vernichtung jedwelchem "Zufälligkeitscharakters" führen,
    falls der Random-Seed mit einem nicht wechselnden Integer (wie des
    öfteren mal time(), falls das Script nicht länger als 1s für dessen
    Terminierung braucht) initiiert wird.
    Neuere Versionen von PHP schliessen erneutes aufrufen von srand()
    grundsätzlich aus (eben weil es falsch ist!) und seit PHP 4.2.0
    braucht man srand() gar nicht erst aufzurufen, denn dies geschieht
    automatisch.

    Fazit: PHP<4.2.0  => (mt_|)srand() nur am Anfang und einmalig im
                         Script.
           PHP>=4.2.0 => gar nicht mehr aufrufen.

    Viele Grüsse

    Philipp

    --
    M$: Patches - don't.
  2. Halihallo AllesMeins

    eine kleine Frage: Ist mt_srand() funktionenübergreifend, sprich reicht es wenn ich es oben in das Hauptscript einbaue oder muss der Kram in jede Funktion mit rein?

    Hui, ich irrte mich, srand() wird nicht nur einmal ausgeführt und
    siehe da, futsch ist die Pseudozufälligkeit: (ich dachte, dass dies
    in neueren PHP-Versionen eben unterbunden wird...)

    <?
       function outputRandom() {
           mt_srand(time());
           echo(mt_rand() . ' ');
       }
       for ( $i=0; $i<1000; $i++ ) { outputRandom(); }
    ?>

    // geht auch mit srand() und rand()

    Also: Lass das Aufrufen von srand() in Funktionen mal lieber, es
          sei denn, du willst immer die gleiche Zufallszahl :-)

    Viele Grüsse

    Philipp

    --
    M$: Patches - don't.
    1. Hiho,

      alles klar - danke für die ausführliche Antwort.

      Marc