is_finite()
Die Funktion is_finite() in PHP prüft, ob ein Wert eine endliche Zahl ist – weder unendlich (INF / -INF) noch NAN.
Die Funktion is_finite() in PHP gibt an, ob eine Zahl endlich ist – also eine gewöhnliche Zahl, die weder unendlich (INF / -INF) noch NAN (Not a Number) ist. Diese Seite erklärt, was als endlich gilt, wie die Funktion nicht-numerische Werte behandelt und wann Sie sie in echtem Code einsetzen würden.
Syntax
is_finite(float $num): bool$num— der zu prüfende Wert. Er wird alsfloatbehandelt; numerische Strings und Integer werden automatisch konvertiert.- Rückgabewert —
true, wenn$numeine endliche Zahl ist,false, wenn esINF,-INFoderNANist.
Warum „endlich" wichtig ist
Gleitkomma-Arithmetik kann spezielle Werte erzeugen, die keine gewöhnlichen Zahlen sind:
INFund-INFentstehen, wenn ein Ergebnis den Bereich einesfloatüberschreitet (zum Beispiel bei der Division durch null mit Gleitkommazahlen oder beiPHP_FLOAT_MAX * 2).NANentsteht bei undefinierten Operationen wiesqrt(-1)oderINF - INF.
Diese Werte breiten sich still in späteren Berechnungen aus und verfälschen Vergleiche (NAN == NAN ergibt sogar false). is_finite() ermöglicht es Ihnen, sie zu erkennen, bevor sie Ihre Ausgabe korrumpieren.
Einfaches Beispiel
Hier wird eine Variable auf eine gewöhnliche Zahl gesetzt und The number is a finite number ausgegeben, da 10 endlich ist.
Verhalten verschiedener Werte
Das folgende Beispiel zeigt, was is_finite() für die häufigen Grenzfälle zurückgibt:
<?php
var_dump(is_finite(10)); // bool(true) — a normal integer
var_dump(is_finite(3.14)); // bool(true) — a normal float
var_dump(is_finite("42")); // bool(true) — numeric string is cast to float
var_dump(is_finite(PHP_FLOAT_MAX)); // bool(true) — large but still finite
var_dump(is_finite(INF)); // bool(false) — positive infinity
var_dump(is_finite(-INF)); // bool(false) — negative infinity
var_dump(is_finite(PHP_FLOAT_MAX * 2));// bool(false) — overflows to INF
var_dump(is_finite(NAN)); // bool(false) — Not a Number
?>Beachten Sie, dass is_finite() nicht prüft, ob ein Wert numerisch ist – es findet zuerst eine Typumwandlung statt. is_finite("hello") wird zu is_finite(0.0) und gibt true zurück. Wenn Sie sicherstellen müssen, dass ein Wert tatsächlich eine Zahl ist, validieren Sie ihn zunächst mit is_numeric().
Ein praktischer Anwendungsfall
Ein gängiges Muster ist die Absicherung einer Berechnung, die zu INF überlaufen könnte:
<?php
function safeSquare($x) {
$result = $x * $x;
// If the multiplication overflows, $result becomes INF.
return is_finite($result) ? $result : null;
}
var_dump(safeSquare(3.0)); // float(9)
var_dump(safeSquare(PHP_FLOAT_MAX)); // NULL — squaring overflows to INF
?>Hier gibt safeSquare() null zurück, anstatt INF in den Rest des Programms durchsickern zu lassen, sodass der Aufrufer den Fehler sauber behandeln kann. (Beachten Sie, dass in PHP 8+ die Division von Integer/Float durch null einen DivisionByZeroError wirft, anstatt INF zu erzeugen – daher ist ein Überlauf der typische Weg, wie Sie auf ein unendliches Ergebnis stoßen.)
Verwandte Funktionen
is_infinite()— die umgekehrte Prüfung: gibttruefürINF/-INFzurück.is_nan()— prüft speziell aufNAN.is_numeric()— prüft, ob ein Wert eine Zahl oder ein numerischer String ist, bevor Sie Mathematik durchführen.is_float()— prüft, ob der Typ einer Variablefloatist.
Fazit
is_finite() ist eine kleine, aber wichtige Absicherung bei der Arbeit mit Gleitkomma-Mathematik in PHP. Sie gibt true nur für gewöhnliche Zahlen zurück und false für INF, -INF und NAN, sodass Sie Überlauf und undefinierte Ergebnisse abfangen können, bevor sie sich ausbreiten. Kombinieren Sie sie mit is_numeric() zur Eingabevalidierung und mit is_infinite() / is_nan(), wenn Sie genau wissen müssen, auf welchen speziellen Wert Sie gestoßen sind.