empty()
Die Funktion empty() in PHP prüft, ob eine Variable leer ist – also keinen aussagekräftigen Wert enthält.
Einführung
empty() ist ein eingebautes PHP-Sprachkonstrukt, das angibt, ob eine Variable „leer" ist – das heißt, ob sie keinen sinnvollen Wert enthält. Es wird am häufigsten verwendet, um fehlende Formularfelder, nicht vorhandene array-Schlüssel und nicht initialisierte Variablen abzufangen, bevor der Code versucht, sie zu verwenden.
Das Wichtigste dabei ist, dass empty($var) im Wesentlichen eine Kurzform für !isset($var) || $var == false ist. Mit anderen Worten: Eine Variable ist leer, wenn sie entweder nicht existiert oder ihr Wert einer der „falschen" Werte von PHP ist. Diese Seite erklärt genau, welche Werte als leer gelten, welche Fallstricke es gibt und wann man empty() gegenüber isset() oder is_null() bevorzugen sollte.
Syntax
bool empty(mixed $var)empty() nimmt ein einzelnes Argument, $var, und gibt einen boolean zurück: true, wenn die Variable als leer gilt, andernfalls false. Da es ein Sprachkonstrukt und keine reguläre Funktion ist, kann es direkt auf Variablen angewendet werden, die möglicherweise nicht existieren, ohne eine Warnung auszulösen.
Hinweis: Vor PHP 5.5 akzeptierte
empty()nur eine Variable. Modernes PHP erlaubt auch Ausdrücke, z. B.empty(trim($name)).
Welche Werte gelten als „leer"?
Eine Variable ist leer, wenn sie nicht existiert oder wenn ihr Wert einer der folgenden ist:
| Wert | empty() gibt zurück |
|---|---|
"" (leerer string) | true |
"0" (string null) | true |
0 (Ganzzahl null) | true |
0.0 (Float null) | true |
null | true |
false | true |
[] (leeres array) | true |
| undefinierte Variable | true |
ein nicht leerer string (z. B. "hello") | false |
| eine von null verschiedene Zahl | false |
| ein nicht leeres array | false |
Dies entspricht genau der Menge der Werte, die PHP in einem boolean-Kontext als false behandelt, zuzüglich des Falls, dass die Variable nicht gesetzt ist.
Verwendungsbeispiele
empty() gibt beim Ausgaben mit echo nichts für false/0 und 1 für true aus. Dieses Beispiel zeigt das Ergebnis daher als Ganzzahl für mehr Übersichtlichkeit.
Hier werden sechs Variablen unterschiedlicher Typen definiert: $var1 ist ein leerer string, $var2 ist ein nicht leerer string, $var3 ist null, $var4 ist 0, $var5 ist der string "0" und $var6 ist ein leeres array. empty() gibt für alle außer $var2 true zurück. Beachten Sie, dass echo für true 1 ausgibt und für false einen leeren string; in den Kommentaren wird 0 bzw. 1 angegeben, um das Ergebnis lesbar zu machen.
Häufige Fallstricke
„0" gilt als leer
Dies ist die bei weitem häufigste Überraschung. Der string "0" gilt laut empty() als leer, obwohl er eindeutig ein Zeichen enthält. Das ist bei Formulareingaben relevant: Ein Benutzer, der 0 in ein Mengen- oder Altersfeld eingibt, wird abgewiesen, wenn mit empty() validiert wird.
<?php
$age = "0"; // a perfectly valid age from a form
var_dump(empty($age)); // bool(true) -- oops, treated as missing
var_dump($age === ""); // bool(false) -- the field was NOT blank
?>Wenn nur ein leeres Feld abgelehnt werden soll, vergleichen Sie mit "" oder verwenden Sie isset() zusammen mit einer Längenprüfung anstelle von empty().
empty() gibt keine Warnung für undefinierte Variablen oder Schlüssel aus
Anders als beim direkten Zugriff auf eine Variable ist empty() sicher auf etwas anzuwenden, das möglicherweise nicht existiert. Es gibt true zurück und erzeugt keine Warnung.
<?php
$config = ["timeout" => 30];
var_dump(empty($config["timeout"])); // bool(false) -- key exists, value is 30
var_dump(empty($config["retries"])); // bool(true) -- key missing, no warning
var_dump(empty($undeclared)); // bool(true) -- no "undefined variable" notice
?>Damit eignet sich empty() ideal zum Prüfen optionaler array-Schlüssel wie $_POST- oder $_GET-Werte, ohne zuvor isset() aufrufen zu müssen.
empty() vs. isset() vs. is_null()
Diese drei Funktionen werden leicht verwechselt. Der Unterschied liegt darin, welche Zustände sie als „kein Wert" behandeln:
| Variablenzustand | empty() | isset() | is_null() |
|---|---|---|---|
| nicht deklariert | true | false | Warnung + true |
null | true | false | true |
"", 0, "0", [] | true | true | false |
"hello", 42 | false | true | false |
Kurz gesagt:
- Verwenden Sie
isset(), wenn Sie nur wissen möchten, ob eine Variable existiert und nichtnullist. - Verwenden Sie
empty(), wenn Sie prüfen möchten, ob ein nutzbarer Wert vorhanden ist (und es keine Rolle spielt, ob0/""/fehlend unterschieden wird). - Verwenden Sie
is_null(), wenn Sie speziellnullerkennen müssen.
Eine typische Absicherung für ein optionales Formularfeld sieht so aus:
<?php
$_POST = ["username" => " "]; // simulate a submitted form with a blank-ish field
if (empty(trim($_POST["username"] ?? ""))) {
echo "Username is required";
} else {
echo "Welcome, " . trim($_POST["username"]);
}
?>Ausgabe:
Username is requiredHier liefert ?? "" einen Standardwert, falls der Schlüssel fehlt, trim() entfernt reine Leerzeichen-Eingaben, und empty() erkennt dann sowohl den fehlenden als auch den leeren Fall.
Fazit
empty() ist ein praktisches Mittel, um zu prüfen, ob eine Variable einen sinnvollen Wert enthält, und kann sicher auf Variablen und array-Schlüssel angewendet werden, die möglicherweise nicht existieren. Der wichtigste Fallstrick ist, dass "0", 0 und leere strings alle als leer gelten. Es ist daher das falsche Werkzeug, wenn null ein gültiger Wert ist – greifen Sie in solchen Fällen auf isset() oder einen expliziten Vergleich zurück. Um beim Debuggen genau zu sehen, was eine Variable enthält, kombinieren Sie es mit var_dump() oder gettype().