Menu

PHP isset(): prüfen, ob Variable oder Schlüssel gesetzt ist

isset($var) liefert true, wenn eine Variable existiert und nicht null ist, sonst false, und das ohne Warnung. Es prüft auch Array-Schlüssel und Objekteigenschaften: isset($user['email']). Hier: isset mit mehreren Variablen, verschachtelte Schlüssel, isset vs empty, isset vs array_key_exists und Formulare prüfen.

Diese Seite enthält ausführbare Editoren - bearbeiten, ausführen und Ausgabe sofort sehen.

isset($var) liefert true, wenn die Variable existiert und ihr Wert nicht null ist. Es liefert false für eine undefinierte Variable, eine mit unset entfernte oder eine, die null enthält, und gibt nie eine Warnung aus.

isset() schaut nur, ob etwas da ist. Ein Wert, der gesetzt, aber leer ist, etwa 0, "" oder [], liefert trotzdem true. Wenn du „gesetzt und nicht leer“ willst, verwende empty (negiert).

Mit isset prüfen, ob ein Array-Schlüssel existiert

Dafür wird isset() am häufigsten verwendet. Einen nicht existierenden Schlüssel zu lesen, gibt in einer normalen PHP-Umgebung Warning: Undefined array key aus; ihn vorher mit isset() zu prüfen nicht. Es funktioniert auch für verschachtelte Schlüssel und hält still bei der ersten fehlenden Ebene an.

Wenn du nur den Wert oder einen Standardwert brauchst, macht $user["website"] ?? "none" dieselbe Prüfung in einem Schritt. Siehe den Null-Coalescing-Operator.

isset mit mehreren Variablen

Übergib mehrere Argumente, und isset() liefert nur dann true, wenn alle gesetzt und nicht null sind. So prüfst du kurz, ob jedes Pflichtfeld angekommen ist.

isset bei Strings und Objekten

Bei einem String prüft isset($str[5]), ob an Offset 5 ein Zeichen steht, also eine schnelle Längenprüfung. Bei einem Objekt prüft es eine Eigenschaft; bei einer Klasse mit privaten Daten ruft isset() die Methode __isset() auf, wenn die Klasse eine definiert.

isset vs empty vs is_null

Wähle in der Tabelle einen Wert für $x, um die drei Prüfungen und den einfachen Cast (bool) zu vergleichen. Jede Zelle wurde von PHP 8.3 berechnet.

isset, empty und is_null für jeden Wert von $x
Point at or tap a cell to read it as PHP.
$xissetemptyis_nullbool
null
false
0
"0"
""
" "
[]
"a"
1
0.0
"0.0"
Every cell computed by PHP 8.3.19.

Das Muster zum Merken:

  • isset() ist nur bei null und bei Dingen, die nicht existieren, false.
  • empty() ist bei diesen true und außerdem bei jedem falsy Wert: false, 0, 0.0, "", "0", [].
  • is_null() liefert bei existierenden Variablen das Gegenteil von isset(), warnt aber, wenn die Variable undefiniert ist. Verwende stattdessen isset() oder === null.

Prüfen, ob ein Formular abgeschickt wurde

isset() ist der klassische Weg, um zu sehen, ob ein Formularfeld angekommen ist. Führe diesen Block aus, tippe einen Namen ein und klicke auf Send: Dasselbe Skript läuft erneut, mit gefülltem $_POST.

Ein leeres Textfeld wird trotzdem gesendet, als "", also ist isset($_POST["name"]) nach jedem Absenden true. Eine nicht angehakte Checkbox wird gar nicht gesendet, und deshalb ist isset() genau der richtige Test für Checkboxen. Um einen nicht leeren Wert zu verlangen, prüfst du den getrimmten String, wie der Block es tut. Die Seite zu Formularen baut ein vollständiges Formular mit Validierung.

isset vs array_key_exists

Die beiden stimmen in allem überein, außer bei einem Schlüssel mit dem Wert null. isset() behandelt ihn als fehlend, array_key_exists() nicht.

Wenn „auf null gesetzt“ in deinen Daten etwas anderes bedeutet als „nicht konfiguriert“, verwende array_key_exists(). Sonst ist isset() kürzer, und weil es ein Sprachkonstrukt und kein Funktionsaufruf ist, auch etwas schneller.

Typischer Fehler: isset auf einen Ausdruck

isset() akzeptiert nur Variablen, Array-Elemente und Eigenschaften. Ein Funktionsergebnis oder eine Konstante zu übergeben ist ein Compile-Fehler:

<?php
if (isset(trim($input))) {}
PHP Fatal error:  Cannot use isset() on the result of an expression (you can use "null !== expression" instead) in /home/index.php on line 2

Speichere das Ergebnis zuerst in einer Variable oder prüfe den Wert selbst: null !== $expr, wie die Meldung vorschlägt, oder trim($input) !== "" bei einem String.

Häufig gestellte Fragen

Was macht isset() in PHP?

isset($x) liefert true, wenn $x existiert und nicht null ist, sonst false. Es gibt nie eine Warnung bei einer undefinierten Variable oder einem undefinierten Array-Schlüssel aus und ist daher bei Request-Daten wie isset($_POST['email']) sicher.

Was ist der Unterschied zwischen isset() und empty() in PHP?

isset() fragt „existiert das und ist es nicht null“; empty() fragt „fehlt das oder ist es falsy“. Bei 0, "", "0" und [] liefert isset() true und empty() ebenfalls true. Bei null oder einem fehlenden Schlüssel ist isset() false und empty() true. !empty($x) ist dasselbe, wie wenn isset($x) && $x truthy ist.

Kann isset() mehrere Variablen prüfen?

Ja: isset($a, $b, $c) liefert nur dann true, wenn jede davon gesetzt und nicht null ist. Es hört bei der ersten auf, die nicht gesetzt ist.

Sollte ich isset() oder array_key_exists() verwenden?

Sie unterscheiden sich nur, wenn der Schlüssel mit dem Wert null existiert: isset($arr['k']) liefert false, array_key_exists('k', $arr) liefert true. Verwende array_key_exists, wenn null ein bedeutsamer gespeicherter Wert ist; sonst ist isset kürzer und etwas schneller.

Illustration der Programmiersprachen bei Coddy

Lerne mit Coddy zu programmieren

LOS GEHT'S