Start · Sprachen · PHP · Referenz · unset

unset

Funktion

Hebt die Zuweisung einer oder mehrerer Variablen auf und gibt den belegten Speicher frei.

seit PHP 4.0.0 Kategorie: type

Signatur

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

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

Typ
void
Beschreibung
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
existiertnicht gesetzt

Einzelnes Array-Element entfernen

<?php
$farben = ['rot', 'grün', 'blau', 'gelb'];
unset($farben[2]); // 'blau' entfernen

print_r($farben);
Array ( [0] => rot [1] => grün [3] => gelb )

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));
bool(false) bool(false) bool(false)

Verhalten bei Referenzen

<?php
$original = 'Hallo';
$alias = &$original;

unset($alias); // Nur den Alias aufheben, nicht den Originalwert

echo $original; // Hallo — Originalwert bleibt erhalten
Hallo

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());
Lösche Eigenschaft: preis Array ( [name] => Tisch )

// 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()).