Start · Sprachen · PHP · Referenz · gmp_init

gmp_init

Funktion

Erzeugt ein <code>GMP</code>-Objekt aus einer ganzen Zahl oder einem Zahlen-String, optional mit angegebener Basis.

seit PHP 4.0.4 Kategorie: math

Signatur

gmp_init(int|string $num, int $base = 10): GMP

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

Typ
GMP
Beschreibung
Gibt ein 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);
?>
1111111110111111111011111111100

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);
?>
255 255

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.';
}
?>
Ist definitiv 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.