PHP Unset – Zerstören von Variablen

Mit unset lassen sich unter PHP bereits definierte und gegebenenfalls auch initialisierte Variablen wieder zerstören. Benötigt der PHP Programmierer eine Variable im weiteren Programmablauf nicht mehr, so kann er diese mit dem Sprachkonstrukt unset für den weiteren Verlauf des Scripts löschen. Dabei werden Variablen stets im aktuellen Kontext gelöscht. Es ist also nicht möglich, eine Variable, die im globalen Script-Kontext definiert wurde, innerhalb einer Funktion mittels Unset auch für den globalen Kontext zu zerstören. Bedeutet: Nur innerhalb der entsprechenden Funktion wird die Variable entfernt. Die Ausnahme bildet der Zugriff per GLOBALS auf eine bestimmte Variable – hierdurch können alle im globalen Script-Kontext definierten Variablen direkt angesprochen und dementsprechen auch gelöscht werden.

Als Argument erwartet unset mindestens eine Variable, die in der üblichen Schreibweise für Variablen angegeben wird. Sollen mehrere Variablen auf einmal gelöscht werden, so werden diese – jeweils durch ein Komma voneinander getrennt – in Form einer Liste angegeben. Unset ist dabei ein vorgegebenes Sprachkonstrukt und keine Funktion. Auch wird kein Rückgabewert zurückgegeben.

PHP Unset Variable: Löschen von Variablendefinitionen

Folgendes Beispiel soll zeigen, wie Sie eine Variablenlöschung vornehmen können. Dabei wird auch das zerstören von globalen Variablen, die zuvor innerhalb der Funktion per global sichtbar gemacht wurde, innerhalb einer Funktion demonstriert.

<?php
    // Variablen definieren und zugleich initialisieren
    $a = 1; $b = 2; $c = 3;
    // Durch PHP Unset Variable einen im Scriptverlauf definierten und bereits
    // initialisierten Speicherplatz mit dem Namen a zerstören.
    unset ($a);
    // Was liefert nun isset? Das Ergebnis ist nur dann True, wenn a noch definiert
    // ist. Nur in diesem Falle wird das String 'ja' ausgegeben. Anderenfalls
    // wird die Frage mit einem 'nein' beantwortet.
    echo 'Ist a gesetzt? ' . (isset ($a) ? 'ja' : 'nein') . '<br>';

    // Nun werden gleich mehrere Variablen auf einmal gelöscht
    // Dabei macht es überhaupt nichts, wenn eine zu löschende Variable bereits
    // gar nicht mehr existiert. Alle noch existierenden Variablen werden aber
    // in einem Rutsch zerstört.
    unset ($a, $b, $c);
    // Hier liefert isset nur dann ein True, wenn ALLE angegebenen Variablen
    // noch existieren. Genau genommen reicht dieses Statement nicht, wenn man
    // wirklich für alle angegebenen Paramter sicher sein möchte, dass diese
    // ein zuvor abgesetztes Unset nicht überlebt haben.
    echo 'Sind a, b oder c immernoch definiert? ' . (isset ($a, $b, $c) ? 'ja' : 'nein') . '<br>';
?>

Ist a gesetzt? nein
Sind a, b oder c immernoch definiert? nein

PHP Array Unset: Felder oder einzelne darin enthaltene Elemente zerstören

Wie im nächsten Beispiel gezeigt wird ist es auch für eine Variable vom Typ Array möglich per PHP Unset-Konstrukt eine Löschung vorzunehmen. Innerhalb von Funktionen sind allerdings bestimmte Randbedingungen zu beachten, die innerhalb der Kommentare im Script näher erläutert werden.

<?php
    // mehrdimensionales Array mit untergeordnetem assoziativem Array definieren
    // aus dem im Script Einträge gelöscht werden sollen
    // In erster Dimension werden die Schlüssel noch automatisch per Index vergeben.
    // Das Erste Element ist unter arr[0] zugreifbar....
    $arr = array (
        // in der 2. Dimension werden wir assoziativ und speichern
        // Schlüssel-Werte-Paare ab
        array ('linktext' => 'PHP Unset Variable', 'href' => 'http://...'),
        array ('linktext' => 'PHP Array Unset', 'href' => 'http://...'),
        array ('linktext' => 'PHP Session Unset', 'href' => 'http://...'));
    // Strukturierte Ausgabe des Inhalts
    echo '<pre>'; print_r ($arr); echo '</pre>';
    // PHP Unset beim Entfernen von einzelnen Array-Elementen
    // Hier wird das unter 'linktext' in zweiter Dimension gespeicherte Element
    // unterhalb der Indexposition 0 in der ersten Dimension, also nur ein Teil
    // der Array Variable, gelöscht.
    unset ($arr[0]['linktext']);
    // Was steht jetzt noch im Array?
    echo '<pre>'; print_r ($arr); echo '</pre>';

    // In folgender Funktion wird nur lokal gelöscht. Im globalen Kontext bleibt
    // alles beim Alten.
    function deleteArray () {
        // Global definiertes Array innerhalb der Funktion sichtbar machen
        global $arr;
        // Das Löschen der Variable (PHP Array Unset) wirkt sich nur innerhalb
        // des Funktionskontext aus.
        unset ($arr);
        // Überprüfen wir das mal:
        echo 'Arr in der Funktion noch da? ' . (isset ($arr) ? 'ja' : 'nein') . '<br>';
    }

    // Aufruf der Funktion zum Löschen durch PHP Array Unset
    deleteArray ();
    // Schauen wir mal, was noch zu finden ist...
    echo 'Ist das Array im globalen Kontext noch existent? ' . (isset ($arr) ? 'ja' : 'nein') . '<br>';
    // Löschen ganzer Arrays und deren Inhalte durch PHP Array Unset. Hier
    // werden alle untergeordneten Arrays quasi rekursiv mitgelöscht. Mittels
    // des Aufrufs unset ($arr[0]) würde etwa der gesamte Ast der zweiten
    // Dimension gelöscht. Der nächste Aufruf löscht gleich das ganze Feld
    // auf einmal.
    unset ($arr);
    // Nochmal die Probe...
    echo 'Immernoch da? ' . (isset ($arr) ? 'ja' : 'nein') . '<br>';
?>

Array
(
  [0] => Array
  (
    [linktext] => PHP Unset Variable
    [href] => http://...
  )

  [1] => Array
  (
    [linktext] => PHP Array Unset
    [href] => http://...
  )

  [2] => Array
  (
    [linktext] => PHP Session Unset
    [href] => http://...
  )

)

Array
(
  [0] => Array
  (
    [href] => http://...
  )

  [1] => Array
  (
    [linktext] => PHP Array Unset
    [href] => http://...
  )

  [2] => Array
  (
    [linktext] => PHP Session Unset
    [href] => http://...
  )

)

Arr in der Funktion noch da? nein
Ist das Array im globalen Kontext noch existent? ja
Immernoch da? nein

PHP Session Unset

Natürlich können auch die Session-Variablen gelöscht werden Dies ist allerdings nur auf zwei verschiedene Weisen möglich (innerhalb von Funktionen funktioniert nur die Version über GLOBALS): Zum Einen können sie per entsprechdendem PHP Unset Aufruf dirket im globalen Kontext entfernt werden. Zum Anderen ist es möglich, die Session-Variablen über die Variable GLOBALS zu löschen. Die Variable GLOBALS ist ein assoziatives Array, welches alle globalen Variablen im Script-Kontext – so auch die Session-Variablen – enthält. Hierdurch kann innerhalb einer Funktion auch auf globale Speicherplätze zugegriffen werden, die nicht per global-Keyword sichtbar gemacht wurden und somit ist ein PHP Session Unset realisierbar. Bei der Nutzung von Sessions sollten allerdings die dafür vorgesehenen Funktionen verwendet werden, wenn alle Session-Variablen (im Falle des Löschens beispielsweise die Funktion session_unset) über die dafür vorgesehenen Session-Funktionen verwaltet werden.

¬ Tutorials



¬ Insolvenzrecht