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.

Letzte Posts aus unserem Forum

Wer kennt .....

Hallo erstmal wer kennt von euch einen WEbprogrammieren,desginer der mir eine Seite erstellen kann ,Communityportal sowas in der art wie ... » mehr

von NCWebmaster am Mittwoch, 7. Oktober 2009 00:32 in PHP - bisher 2 Antworten
Letzter Beitrag: Montag, 17. Dezember 2012 16:57 von maharadja

...einen guten Onlineshop für Taufringe? Ich habe bisher Taufringe Direkt gefunden und wollte mal nachhaken, ob der Shop für Taufringe wirklich so ... » mehr

Webentwickler Konferenz in Hamburg

Hallo Zusammen, Am 20./21. Mai findet in Hamburg die erste Developer Conference 2011 statt. Wie der Name bereits verrät, handelt die Konferenz rund ... » mehr

von devcon-hamburg am Dienstag, 12. April 2011 16:50 in PHP - noch nicht beantwortet

bedingte Weiterleitung in Kontaktformularen

Hallo zusammen, ich habe ein kleines Problem: Ich brauche bei der Entwicklung eines Kontaktformulares für eine Website eine bedingte Weiterleitung ... » mehr

von scatha am Donnerstag, 10. März 2011 01:12 in PHP - noch nicht beantwortet

Gesucht: Auslesen einer externen Website

Mein vorhaben ist recht simpel aber ich bin php noob (hoffe das entschuldigt es nen bissl xD) und hab kp wie ichs anfangen soll. Und zwar möchte ich ... » mehr

von HeathenMan am Dienstag, 1. Februar 2011 22:57 in PHP - bisher 1 Antwort
Letzter Beitrag: Donnerstag, 3. Februar 2011 14:43 von alm

Hallo, am einfachsten und kompaktesten kann man das mit einem regulären Ausdruck machen. Einfach mal nach der Funktion preg_match_all suchen und den ... » mehr

Zeilenumbruch in der Bildergalerie-Beschriftung

Hallo, die Bildergalerie mit php und js ist super, jedoch möchte ich gern zu meinen Bildern verschiedene Bemerkungen machen und zwar untereinander, ... » mehr

von Sylma am Mittwoch, 26. Januar 2011 01:13 in PHP - bisher 1 Antwort
Letzter Beitrag: Freitag, 28. Januar 2011 10:16 von alm

Hallo, ich nehme an, dass \n im Beschreibungstext nicht funktioniert aber versuchen kann man es. Ansonsten: Schon mal mit einer UTF-Sequenz ... » mehr

¬ Tutorials



¬ Insolvenzrecht