Signatur
Beschreibung
gmp_init() wandelt eine ganze Zahl oder einen Zahlen-String in ein GMP-Objekt um, das anschließend von allen anderen GMP-Funktionen weiterverarbeitet werden kann. GMP steht für GNU Multiple Precision und erlaubt das Rechnen mit beliebig großen ganzen Zahlen, die den nativen PHP-Integer-Bereich überschreiten.
Der Parameter $base gibt die Basis des übergebenen Strings an. Gültige Werte sind 2 bis 62 sowie 0. Bei Basis 0 wird die Basis automatisch aus dem Präfix des Strings erkannt: 0x oder 0X für Hexadezimal, 0b oder 0B für Binär und führende 0 für Oktal. Ohne Präfix wird Dezimal angenommen.
Ab PHP 5.6 können GMP-Objekte in den meisten GMP-Funktionen direkt durch einen int-Literal ersetzt werden – gmp_init() ist dann häufig überflüssig. Dennoch ist die explizite Initialisierung empfehlenswert, wenn Werte aus externen Quellen (z. B. Datenbank, Benutzereingabe) stammen oder eine nicht-dezimale Basis benötigt wird.
Das zurückgegebene GMP-Objekt unterstützt seit PHP 7.2 arithmetische Operatoren direkt, sodass z. B. $a + $b mit GMP-Objekten korrekt funktioniert, wenn die GMP-Extension geladen ist.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $num Pflicht | int|string | Die zu initialisierende Zahl als PHP-Integer oder als String. Bei String-Übergabe darf die Zahl optional ein führendes - oder + sowie ein basisspezifisches Präfix enthalten. |
|
| $base | int | 10 | Die Basis der Zahl. Erlaubte Werte: 2–62 sowie 0 (automatische Erkennung anhand des String-Präfixes). Wird ignoriert, wenn $num ein PHP-Integer ist. |
Rückgabewert
GMP-Objekt zurück, das die angegebene Zahl repräsentiert. Im Fehlerfall (ungültiger String für die gewählte Basis) wird ein ValueError ausgelöst.Beispiele
Einfache Initialisierung und Addition großer Zahlen
<?php
// Zwei sehr große Zahlen initialisieren und addieren
$a = gmp_init('123456789012345678901234567890');
$b = gmp_init('987654321098765432109876543210');
$sum = gmp_add($a, $b);
echo gmp_strval($sum);
?>
Initialisierung mit hexadezimalem String
<?php
// Hexadezimalen Wert in ein GMP-Objekt umwandeln
$hex = gmp_init('FF', 16);
echo gmp_strval($hex, 10); // Dezimalwert ausgeben
echo PHP_EOL;
// Automatische Basis-Erkennung über Präfix
$autoHex = gmp_init('0xFF', 0);
echo gmp_strval($autoHex, 10);
?>
Kryptographisch große Primzahl prüfen
<?php
// Mersenne-Primzahl M31 = 2^31 - 1
$mersenne = gmp_init('2147483647');
$result = gmp_prob_prime($mersenne);
if ($result === 2) {
echo 'Ist definitiv prim.';
} elseif ($result === 1) {
echo 'Ist wahrscheinlich prim.';
} else {
echo 'Ist nicht prim.';
}
?>
// Wichtig · Fallstricke
GMP-Extension erforderlich: Die Funktion steht nur zur Verfügung, wenn PHP mit der GMP-Bibliothek kompiliert wurde (--with-gmp). Prüfe die Verfügbarkeit mit extension_loaded('gmp').
Fehlerbehandlung: Seit PHP 8.0 wird bei einem ungültigen Zahlen-String für die gewählte Basis ein ValueError geworfen. In älteren Versionen wurde ein Fehler der Stufe E_WARNING ausgelöst und false zurückgegeben – entsprechende Abfragen in Legacy-Code sollten angepasst werden.
String-Eingaben aus Benutzerquellen sollten vor der Übergabe validiert werden, da ungültige Zeichen je nach Basis zu Ausnahmen führen.