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 1 Antwort
Letzter Beitrag: Mittwoch, 7. Oktober 2009 13:26 von kalle

Hallo auch, da gibt es sicher viele die das machen würden, allerdings deutlich weniger die es auch tatsächlich machen könnten - noch einmal weniger ... » mehr

oh Mann

Hallo erstmals..... also ich kenn mich ja nicht so aus, aber ich denke die Menschheit fliegt auf den Mond, dann müsste es auch eine Lösung für mein ... » mehr

von Dummbazz am Dienstag, 24. Februar 2009 15:11 in PHP - bisher 2 Antworten
Letzter Beitrag: Mittwoch, 25. Februar 2009 11:48 von Dummbazz

Danke für die aufmunternde Worte... ... » mehr

counter auch ohne datenbank?

tach auch, ich habe nach einem besucherzähler gesucht, der auf meiner seite anzeigt, wieviele besucher sich dort aufhalten. allerdings habe ich ... » mehr

von marcel am Montag, 8. Dezember 2008 12:21 in PHP - bisher 1 Antwort
Letzter Beitrag: Montag, 8. Dezember 2008 13:34 von alm

Hallo, sicher kann die Counter-Klasse so umgeschrieben werden, dass sie auch ohne Datenbankanbindung funktioniert. Allerdings würde das einer neuen ... » mehr

DAten speichern und abfragen

Hallo an Alle! Hoffe, dass ich hier im richtigen Forum bin. Vielleicht kann mir jemand einen Tip geben. Ich möchte auf meiner Webpage ein Formular ... » mehr

von muenchner am Samstag, 12. Juli 2008 18:31 in PHP - bisher 1 Antwort
Letzter Beitrag: Montag, 14. Juli 2008 08:49 von alm

Hallo, ich bin mir nicht sicher, wie das jetzt gemeint ist! Geht es um die Frage: Sollen die Optionen des Forumlars (die einzelnen Checkboxen) in ... » mehr

Tutorials :: PHP & MySQL - Problem

Hi, zunächsteinmal danke für das Tutorial: ... » mehr

von migges am Montag, 2. Juni 2008 12:05 in PHP - bisher 3 Antworten
Letzter Beitrag: Dienstag, 3. Juni 2008 11:45 von alm

Das mit den Oder-Operatoren wundert mich ein wenig... Welchen Fehler hat der Interpreter an diesen Stellen ausgegeben? Ich habe bislang mit ... » mehr

¬ Tutorials



¬ Insolvenzrecht