W3docs

srand()

Wir erläutern die Funktion srand() in PHP, die den Zufallszahlengenerator initialisiert und in PHP 8.0 entfernt wurde.

Die Funktion srand() in PHP wurde verwendet, um den Zufallszahlengenerator zu initialisieren. Wichtig: Diese Funktion wurde in PHP 7.1 als veraltet markiert und in PHP 8.0 vollständig entfernt. Diese Anleitung erläutert ihr früheres Verhalten und zeigt, wie die gleichen Ergebnisse mit modernem PHP erzielt werden können.

Was ist die Funktion srand()?

Die Funktion srand() war eine eingebaute PHP-Funktion, die den Zufallszahlengenerator mit einem bestimmten Startwert (Seed) initialisierte. Sie akzeptierte einen optionalen ganzzahligen Parameter $seed und gab void zurück. Wenn ein Seed angegeben wird, erzeugt der Generator eine vorhersehbare Zahlenfolge, was für Tests oder reproduzierbare Simulationen nützlich ist.

Verwendung der Funktion srand() (Legacy PHP < 7.1)

Die Verwendung von srand() in älteren PHP-Versionen war unkompliziert. So funktionierte es:

⚠️ Hinweis zur Veraltung: Dieses Beispiel ist für ältere PHP-Umgebungen (Versionen vor 7.1). Die Ausführung dieses Codes auf PHP 7.1+ führt zu einem schwerwiegenden Fehler.

Legacy-Beispiel

php— editable, runs on the server

In diesem Beispiel initialisiert srand(123) den Generator. Nachfolgende Aufrufe von rand() erzeugen bei jedem Skriptdurchlauf mit diesem Seed exakt dieselbe Zahlenfolge. Diese Determiniertheit – keine Zufälligkeit – war der eigentliche Zweck des Seedings: Es ermöglichte, eine „zufällige" Folge auf Abruf zu reproduzieren, etwa für Unit-Tests, Spielwiederholungen oder die Fehlersuche.

Wird srand() ohne Argument aufgerufen (oder in PHP 4.2.0+ gar nicht aufgerufen), wird der Generator mit einem schwer vorhersehbaren Wert initialisiert, sodass jeder Durchlauf eine andere Folge erzeugt.

Moderne PHP-Alternativen

Da srand() und rand() in PHP 8.0 entfernt wurden, sollten stattdessen die folgenden modernen Funktionen verwendet werden:

  • random_int(): Für die meisten Anwendungsfälle empfohlen. Sie generiert kryptografisch sichere Zufallsganzzahlen und erfordert keine manuelle Initialisierung.
  • mt_rand(): Schneller als random_int(), aber nicht kryptografisch sicher. PHP 7.1+ initialisiert den Mersenne-Twister-Algorithmus automatisch, sodass eine manuelle Initialisierung selten notwendig ist.

Wenn für Tests noch eine reproduzierbare Folge benötigt wird – der ursprüngliche Grund für die Verwendung von srand() – kann der Mersenne-Twister-Generator explizit mit mt_srand() vor dem Aufruf von mt_rand() initialisiert werden. Den größten von diesen Funktionen zurückgebbaren Wert liefert mt_getrandmax().

Modernes Beispiel

<?php
  // Generate a cryptographically secure random integer between 1 and 100
  $result = random_int(1, 100);
  echo $result;
?>

Fazit

Die Funktion srand() ist ein veraltetes Werkzeug, das aus modernem PHP entfernt wurde. Für aktuelle Projekte sollte random_int() für sichere Zufallszahlen oder mt_rand() für allgemeine Zufallszahlen verwendet werden. Diese Anleitung soll dabei helfen, Legacy-Code zu migrieren und den modernen Ansatz zur Zufallszahlengenerierung in PHP zu verstehen.

Übungen

Übung
Wozu dient die Funktion srand() in PHP?
Wozu dient die Funktion srand() in PHP?
Was this page helpful?