W3docs

empty

Lernen Sie, wie PHP's empty() prüft, ob eine Variable leer oder nicht gesetzt ist, welche Werte als leer gelten (inkl. "0"-Falle) und wie es sich von isset() unterscheidet.

Das PHP empty()-Sprachkonstrukt

empty() ist ein PHP-Sprachkonstrukt, das angibt, ob eine Variable leer ist — das heißt, ob sie entweder nicht existiert oder einen Wert enthält, den PHP als „falsy" betrachtet (wie "", 0 oder null). Da es niemals eine Warnung für undefinierte Variablen ausgibt, ist es das bevorzugte Werkzeug zur Prüfung optionaler Eingaben wie Formularfelder, Query-Parameter und Konfigurationswerte.

Diese Seite behandelt die Syntax, die genaue Liste der Werte, die als leer gelten, häufige Fallstricke und wie sich empty() von den verwandten Konstrukten isset() und is_null() unterscheidet.

Genau genommen ist empty() ein Sprachkonstrukt, keine Funktion, auch wenn es mit Klammern geschrieben wird. Dieser Unterschied hat eine praktische Konsequenz — siehe Es funktioniert nur mit Variablen weiter unten.

Syntax

<?php

if (empty($variable)) {
  // $variable is empty (or does not exist)
}

empty($variable) gibt true zurück, wenn die Variable leer ist, und false andernfalls. Es ist logisch äquivalent zu !isset($variable) || $variable == false.

Was als leer gilt

Eine Variable ist leer, wenn sie nicht existiert oder einen der folgenden Werte enthält:

WertWarum er leer ist
nicht gesetzte / undefinierte Variabledie Variable wurde nie zugewiesen
nullder „kein Wert"-Typ
falseder boolean false
0 (int) und 0.0 (float)numerische Null
"0" (string)der string, der eine einzelne Null enthält — eine klassische Überraschung
"" (leerer string)ein string ohne Zeichen
[] (leeres array)ein array ohne Elemente

Alles andere — einschließlich "0.0", " " (ein Leerzeichen), "false" und das array [0] — ist nicht leer.

Die Regel für "0" ist diejenige, die die meisten überrascht. Eine Hausnummer, eine Postleitzahl oder ein Suchbegriff wie "0" wird als leer gemeldet. Wenn eine buchstäbliche Null ein gültiger Wert ist, prüfen Sie stattdessen die Länge oder vergleichen Sie explizit, anstatt empty() zu verwenden.

Beispiele

<?php

// Example 1 — empty string
$myVariable = "";
if (empty($myVariable)) {
  echo "Variable is empty" . PHP_EOL;
} else {
  echo "Variable is not empty" . PHP_EOL;
}

// Example 2 — empty array
$myArray = [];
if (empty($myArray)) {
  echo "Array is empty" . PHP_EOL;
} else {
  echo "Array is not empty" . PHP_EOL;
}

// Output:
// Variable is empty
// Array is empty

Ein praktischer Anwendungsfall: Formulareingaben validieren

empty() glänzt beim Schutz vor fehlenden oder leeren Anfragedaten, da es in einem einzigen Ausdruck sowohl „nicht gesetzt" als auch „leer" prüft:

<?php

$username = $_POST['username'] ?? null;

if (empty($username)) {
  echo "Please enter a username." . PHP_EOL;
} else {
  echo "Welcome, $username!" . PHP_EOL;
}

// With $_POST['username'] missing or "" → "Please enter a username."
// With $_POST['username'] = "Sam"      → "Welcome, Sam!"

Die "0"-Falle in der Praxis

<?php

$values = ["", "0", "0.0", "hello", " "];

foreach ($values as $value) {
  $state = empty($value) ? "empty" : "not empty";
  echo "'$value' is $state" . PHP_EOL;
}

// Output:
// '' is empty
// '0' is empty
// '0.0' is not empty
// 'hello' is not empty
// ' ' is not empty

Beachten Sie, dass "0" als leer gemeldet wird, "0.0" und ein einzelnes Leerzeichen jedoch nicht.

Es funktioniert nur mit Variablen

Da empty() ein Sprachkonstrukt ist, kann es nur auf Variablen angewendet werden — das Übergeben des Ergebnisses eines Ausdrucks oder eines Funktionsaufrufs ist ein Syntaxfehler vor PHP 5.5 und generell eine Logikfalle, die vermieden werden sollte:

<?php

// Valid — argument is a variable:
$name = trim("  ");
if (empty($name)) {
  echo "Name is blank";
}

// Avoid — empty(trim($name)) reads awkwardly; assign first, as above.

empty() vs isset() vs is_null()

Diese drei Konstrukte werden leicht verwechselt. Die Tabelle zeigt, was jedes für dieselben Eingaben zurückgibt:

Eingabeempty()isset()is_null()
undefinierte VariabletruefalseWarnung + true
nulltruefalsetrue
""truetruefalse
0 / "0"truetruefalse
falsetruetruefalse
[]truetruefalse
"hello"falsetruefalse

Faustregeln:

  • Verwenden Sie isset(), um zu fragen: „Existiert diese Variable und ist sie nicht null?" — ideal für Array-Schlüssel und Objekteigenschaften.
  • Verwenden Sie is_null(), um zu fragen: „Ist dieser Wert genau null?" und sonst nichts.
  • Verwenden Sie empty(), um zu fragen: „Fehlt dieser Wert oder ist er leer?" — die breiteste, großzügigste Prüfung.

Fazit

empty() bietet eine einzige, warnungsfreie Möglichkeit zu prüfen, ob eine Variable fehlt oder einen falsy-Wert enthält, was es zu einer natürlichen Wahl für die Validierung optionaler Eingaben macht. Behalten Sie die "0"-Regel im Hinterkopf, denken Sie daran, dass es nur Variablen akzeptiert, und greifen Sie auf isset() oder is_null() zurück, wenn Sie eine engere Prüfung benötigen. Weitere Informationen zu den Werten, auf die diese Prüfungen angewendet werden, finden Sie unter PHP-Datentypen und PHP-Variablen.

Übungen

Übung
Was macht empty() in PHP?
Was macht empty() in PHP?
Was this page helpful?