W3docs

unset()

Die Funktion unset() ist eine eingebaute PHP-Funktion, die eine Variable oder ein Array-Element entfernt und Speicher freigibt.

Einführung

Die Funktion unset() ist eine eingebaute PHP-Funktion, die eine Variable oder ein Element eines Arrays vernichtet. Sobald eine Variable mit unset() entfernt wurde, existiert sie nicht mehr — ein erneuter Zugriff darauf verhält sich genau so, als wäre sie nie deklariert worden.

Diese Seite behandelt die Syntax von unset(), das Verhalten bei Arrays, Referenzen, Objekteigenschaften und Variablen innerhalb von Funktionen sowie den Unterschied zur einfachen Zuweisung von null. Wenn Sie diese Unterschiede kennen, schreiben Sie vorhersehbaren Code und vermeiden die häufigsten Fallstricke mit unset().

Ein wichtiger Punkt vorab: unset() entfernt den Namen (die Variablenbindung), nicht zwingend den zugrunde liegenden Wert. PHP gibt den Speicher des Werts automatisch durch Reference-Counting und den Garbage Collector frei, sobald keine andere Referenz mehr darauf zeigt — nicht genau in dem Moment, in dem Sie unset() aufrufen.

Syntax

unset(mixed $var, mixed ...$vars): void

Die Funktion nimmt eine oder mehrere Variablen (durch Kommas getrennt) entgegen und gibt nichts zurück (void). Jedes Argument ist die Variable oder das Array-Element, das vernichtet werden soll.

<?php
$a = 1;
$b = 2;
$c = 3;
unset($a, $b, $c); // destroy several variables in one call
?>

Ein Array-Element entfernen

Die häufigste Verwendung von unset() ist das Löschen eines Elements aus einem Array über seinen Schlüssel:

Beispiel für PHP unset()

php— editable, runs on the server

Hier entfernen wir das Element am Index 1 ("banana"). Die Ausgabe lautet:

Array
(
    [0] => apple
    [2] => cherry
)

Beachten Sie, dass unset() das Array nicht neu indiziert — die verbleibenden Schlüssel bleiben 0 und 2, sodass eine „Lücke" entsteht. Dies ist die häufigste Überraschung bei unset(). Wenn Sie eine saubere, sequenziell neu indizierte Liste (0, 1, 2, …) benötigen, übergeben Sie das Ergebnis an array_values():

<?php
$array = ["apple", "banana", "cherry"];
unset($array[1]);
$array = array_values($array);
print_r($array);
?>
Array
(
    [0] => apple
    [1] => cherry
)

Eine eigenständige Variable vernichten

Wird unset() auf eine einfache Variable angewendet, entfernt es sie vollständig. Danach wird die Variable als undefiniert behandelt:

<?php
$name = "John";
unset($name);
echo $name ?? "Variable is unset"; // Outputs: Variable is unset
?>

Der Null-Coalescing-Operator ?? ist die sichere Methode, um eine möglicherweise nicht mehr vorhandene Variable zu lesen, da er keine Warnung „Undefined variable" auslöst. Mit isset() lässt sich ebenfalls prüfen, ob eine Variable noch existiert.

unset() vs. Zuweisung von null

Diese beiden Vorgehensweisen sehen ähnlich aus, sind aber nicht dasselbe:

<?php
$x = 5;
$y = 5;

unset($x);   // $x no longer exists
$y = null;   // $y still exists, its value is null

var_dump(isset($x)); // bool(false) — the variable is gone
var_dump(isset($y)); // bool(false) — isset() returns false for null too
var_dump(array_key_exists('y', get_defined_vars())); // bool(true) — $y is still defined
?>

Verwenden Sie unset(), wenn die Variable (oder der Array-Schlüssel) nicht mehr existieren soll. Weisen Sie null zu, wenn Sie die Variable behalten, aber ihren Wert leeren möchten. Beachten Sie, dass isset() in beiden Fällen false zurückgibt. Um sie zu unterscheiden, müssen Sie direkt auf das Vorhandensein des Schlüssels prüfen. Weitere verwandte Prüfungen finden Sie unter is_null() und empty().

unset() innerhalb einer Funktion

Das Verhalten von unset() hängt vom Gültigkeitsbereich der Variable ab, was viele Entwickler überrascht:

<?php
function destroy_local() {
    $value = 10;
    unset($value); // only the local copy is destroyed
    echo $value ?? "local is unset"; // Outputs: local is unset
}
destroy_local();
?>

Wenn Sie eine per Referenz übergebene Variable mit unset() entfernen, wird nur die lokale Referenz aufgehoben — die Variable des Aufrufers bleibt unberührt:

<?php
function destroy_ref(&$ref) {
    unset($ref); // breaks the local binding, not the original
}

$data = "keep me";
destroy_ref($data);
echo $data; // Outputs: keep me
?>

Wenn eine Funktion tatsächlich eine Variable aus dem aufrufenden Gültigkeitsbereich entfernen soll, übergeben Sie sie als referenziertes Array-Element oder verwenden Sie eine globale Variable — in den meisten Fällen ist es jedoch sauberer, den Code so umzugestalten, dass ein Wert zurückgegeben wird. Weitere Informationen zu Gültigkeitsbereichsregeln finden Sie unter Variables Scope.

Objekteigenschaften entfernen

unset() entfernt auch eine Eigenschaft aus einer Objektinstanz:

<?php
$user = new stdClass();
$user->name = "Ann";
$user->role = "admin";

unset($user->role);
var_dump(isset($user->role)); // bool(false)
print_r($user);
?>
bool(false)
stdClass Object
(
    [name] => Ann
)

Der foreach-Referenz-Fallstrick

Ein klassischer Fehler: Nach dem Iterieren eines Arrays mit einer Referenz (&$value) zeigt die Referenzvariable noch auf das letzte Element. Eine spätere Wiederverwendung kann das Array still und heimlich korrumpieren. Die Lösung besteht darin, die Referenz unmittelbar nach der Schleife mit unset() zu entfernen:

<?php
$items = [1, 2, 3];
foreach ($items as &$value) {
    $value *= 2;
}
unset($value); // break the dangling reference — do this every time

print_r($items);
?>
Array
(
    [0] => 2
    [1] => 4
    [2] => 6
)

Fazit

unset() vernichtet Variablen, Array-Elemente und Objekteigenschaften und entfernt die Bindung, sodass der Name nicht mehr existiert. Behalten Sie diese Punkte im Kopf:

  • Es entfernt den Namen, nicht zwingend den Wert — der Speicher wird durch PHPs Reference-Counting und Garbage Collector freigegeben.
  • Das Entfernen eines Array-Elements hinterlässt eine Lücke; verwenden Sie array_values() zur Neuindizierung.
  • Es ist nicht dasselbe wie das Zuweisen von null; unset() lässt die Variable aufhören zu existieren.
  • Innerhalb von Funktionen respektiert es den Gültigkeitsbereich, und das Entfernen eines per Referenz übergebenen Parameters bricht nur die lokale Bindung.
  • Verwenden Sie nach einer foreach ... as &$value-Schleife stets unset() für die Schleifenvariable.

Weitere Informationen zur Arbeit mit den Daten, auf die unset() angewendet wird, finden Sie unter PHP Variables und PHP Arrays.

Übungen

Übung
Was ist die primäre Funktion von 'unset()' in PHP?
Was ist die primäre Funktion von 'unset()' in PHP?
Was this page helpful?