Signatur
Beschreibung
unset() zerstört die angegebene Variable bzw. Variablen, sodass sie im aktuellen Gültigkeitsbereich nicht mehr existieren. Ein anschließender Aufruf von isset() gibt false zurück. Die Funktion akzeptiert eine beliebige Anzahl von Argumenten, sodass mehrere Variablen in einem einzigen Aufruf gelöscht werden können.
Bei Arrays entfernt unset($array['key']) gezielt ein einzelnes Element, ohne das gesamte Array zu löschen. Bei Objekteigenschaften innerhalb einer Klasse lässt sich unset($this->property) verwenden; wird dabei die magische Methode __unset() definiert, wird diese aufgerufen. Bei Objekten außerhalb der Klasse entfernt unset($obj->prop) die Eigenschaft ebenfalls, sofern sie zugänglich ist.
Im Kontext von Referenzen löst unset() lediglich die Bindung der lokalen Variable an den Wert – der Wert selbst bleibt über andere Referenzen erreichbar. Innerhalb einer Funktion hat unset() einer globalen Variable (die per global $var eingebunden wurde) keinen Effekt auf die eigentliche globale Variable; es wird nur der lokale Alias aufgehoben.
unset() eignet sich besonders zum expliziten Freigeben großer Datenstrukturen (z. B. umfangreiche Arrays oder Objekte) innerhalb lang laufender Skripte sowie zum gezielten Bereinigen von Arrays in Schleifen oder nach Datenbankabfragen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $var Pflicht | mixed | Die Variable, deren Zuweisung aufgehoben werden soll. Kann auch ein Array-Element ($array['key']) oder eine Objekteigenschaft ($obj->prop) sein. |
|
| $vars | mixed | Beliebig viele weitere Variablen, die in einem einzigen Aufruf gleichzeitig aufgehoben werden sollen. |
Rückgabewert
unset() gibt keinen Wert zurück.Beispiele
Einfaches Löschen einer Variablen
<?php
$name = 'Alice';
echo isset($name) ? 'existiert' : 'nicht gesetzt'; // existiert
unset($name);
echo isset($name) ? 'existiert' : 'nicht gesetzt'; // nicht gesetzt
Einzelnes Array-Element entfernen
<?php
$farben = ['rot', 'grün', 'blau', 'gelb'];
unset($farben[2]); // 'blau' entfernen
print_r($farben);
Mehrere Variablen auf einmal löschen
<?php
$a = 1;
$b = 2;
$c = 3;
unset($a, $b, $c);
var_dump(isset($a), isset($b), isset($c));
Verhalten bei Referenzen
<?php
$original = 'Hallo';
$alias = &$original;
unset($alias); // Nur den Alias aufheben, nicht den Originalwert
echo $original; // Hallo — Originalwert bleibt erhalten
Objekteigenschaft löschen mit __unset()
<?php
class Produkt
{
private array $daten = ['name' => 'Tisch', 'preis' => 199];
public function __unset(string $key): void
{
echo "Lösche Eigenschaft: $key\n";
unset($this->daten[$key]);
}
public function getDaten(): array
{
return $this->daten;
}
}
$p = new Produkt();
unset($p->preis);
print_r($p->getDaten());
// Wichtig · Fallstricke
Globale Variablen in Funktionen: Wird innerhalb einer Funktion global $var; unset($var); aufgerufen, so wird lediglich der lokale Alias aufgehoben. Die globale Variable im Array $GLOBALS bleibt unberührt. Um eine echte globale Variable zu löschen, muss unset($GLOBALS['var']) verwendet werden.
Array-Schlüssel nach unset(): Die numerischen Schlüssel eines Arrays werden nach dem Entfernen eines Elements nicht neu indiziert. Soll eine lückenlose Indizierung wiederhergestellt werden, muss anschließend array_values() aufgerufen werden.
Speicherfreigabe: PHP gibt den Speicher einer Variable erst dann wirklich frei, wenn kein weiterer Verweis mehr auf den Wert zeigt. Bei Objekten mit zirkulären Referenzen kann der Garbage Collector eingesetzt werden (gc_collect_cycles()).