is_infinite()
Erfahren Sie mehr über die Funktion is_infinite() in PHP, die prüft, ob ein Wert unendlich ist, und wie Sie sie praktisch einsetzen.
Die Funktion is_infinite() in PHP prüft, ob ein Gleitkomma-Wert unendlich ist – also gleich INF (positive Unendlichkeit) oder -INF (negative Unendlichkeit). Diese Seite erklärt, was als „unendlich" gilt, wie sich die Funktion verhält und in welchen praktischen Situationen man sie einsetzt.
Syntax und Rückgabewert
is_infinite(float $num): bool$num— der zu prüfende Wert.- Gibt
truezurück, wenn$numgleichINFoder-INFist, undfalsefür jeden anderen Wert, einschließlich normaler endlicher Zahlen undNAN(Not a Number).
is_infinite() ist nur für Gleitkommazahlen sinnvoll. Integer können in PHP niemals unendlich sein, daher gibt die Funktion für sie immer false zurück.
Woher kommen unendliche Werte?
In PHP folgen Gleitkommazahlen dem IEEE 754-Standard, der spezielle Werte für Unendlichkeit kennt. INF oder -INF entsteht, wenn:
- Die vordefinierte Konstante direkt verwendet wird:
$x = INF; - Eine Berechnung den Bereich eines Floats überschreitet (ungefähr
±1.8e308):1.0e308 * 10ergibtINF. - Eine Division durch Gleitkomma-Null stattfindet oder eine Funktion wie
log(0)negative Unendlichkeit zurückgibt.
Da sich diese Werte in späteren Berechnungen still fortpflanzen (INF + 1 ist immer noch INF), ermöglicht die Prüfung darauf, eine Berechnung abzufangen, die den zulässigen Bereich verlassen hat.
Grundlegende Verwendung
Hier wird die Konstante INF der Variablen $number zugewiesen und dann is_infinite() aufgerufen, um sie zu prüfen. Die Bedingung ist wahr, also gibt das Skript The number is infinite aus.
Was ist und was ist nicht unendlich
Die folgende Wertetabelle zeigt genau, was is_infinite() zurückgibt. Beachten Sie, dass ein Überlauf INF erzeugt, während eine große, aber darstellbare Zahl das nicht tut:
<?php
var_dump(is_infinite(INF)); // bool(true)
var_dump(is_infinite(-INF)); // bool(true)
var_dump(is_infinite(PHP_FLOAT_MAX * 2)); // bool(true) — overflow
var_dump(is_infinite(1 / 0.0001)); // bool(false) — large but finite
var_dump(is_infinite(42)); // bool(false) — an integer
var_dump(is_infinite(NAN)); // bool(false) — NAN is not infinite
?>Der wesentliche Fallstrick: NAN (das Ergebnis von Operationen wie sqrt(-1)) ist nicht unendlich, daher ist is_infinite(NAN) false. Verwenden Sie is_nan(), um diesen Fall zu erkennen, und is_finite(), um zu bestätigen, dass ein Wert eine normale, verwendbare Zahl ist.
Ein praktisches Beispiel: Schutz vor Überlauf
Ein häufiger Anwendungsfall in der Praxis ist die Validierung des Ergebnisses einer Berechnung, bevor es gespeichert oder angezeigt wird. Wenn eine Operation zu INF übergelaufen ist, kann der Code reagieren, anstatt Unendlichkeit weiterzugeben:
<?php
function guardedMultiply(float $a, float $b): string
{
$product = $a * $b;
return is_infinite($product)
? "Result overflowed to infinity"
: "Result: $product";
}
echo guardedMultiply(1.0e200, 1.0e200), PHP_EOL; // Result overflowed to infinity
echo guardedMultiply(2, 3), PHP_EOL; // Result: 6
?>Die Multiplikation von 1.0e200 mit sich selbst überschreitet den Float-Bereich, sodass das Produkt INF ist und die Schutzfunktion es abfängt. Der zweite Aufruf gibt einen normalen Wert zurück.
is_infinite() vs. verwandte Funktionen
PHP bündelt mehrere Float-Inspektions-Hilfsfunktionen. Wählen Sie diejenige, die zur Frage passt, die Sie stellen:
is_infinite()— ist der WertINFoder-INF?is_finite()— ist der Wert eine normale, endliche Zahl (nichtINF,-INFoderNAN)?is_nan()— ist der WertNAN?is_float()— ist die Variable überhaupt vom Typ float?
Weitere numerische Hilfsfunktionen finden Sie in der PHP Math-Referenz.
Fazit
is_infinite() gibt true nur für INF und -INF zurück, wodurch Sie Gleitkomma-Überläufe und andere Operationen erkennen können, die Unendlichkeit erzeugen. Kombinieren Sie sie mit is_finite() und is_nan(), um das Ergebnis einer Float-Berechnung vollständig zu validieren, bevor Sie sich darauf verlassen.