Ankündigung

Einklappen
Keine Ankündigung bisher.

Unset - Wann benutzt Ihr es?

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Unset - Wann benutzt Ihr es?

    Wann benutzt Ihr unset um eure Variablen zu löschen?
    Immer dann, wenn Ihr Sie nicht mehr braucht? Bringt das einem überhaupt etwas, die Variablen zu löschen nudn nicht einfach stehen zu lassen?

  • #2
    Ich nutz unset() fast nie. Grad wenn du objekt orientiert arbeitest dann hast du ja meistens nur sehr kurze Methoden, entsprechenden verlieren alle Variablen danach ihre Gültigkeit. Bin mir zwar nicht sicher was dann passiert, ich nehm aber stark an das die Variablen wie bei unset() vom GC irgendwann freigegeben werden. Von daher denke ich nicht das man unset() wirklich immer nutzen muss.

    Es macht halt meiner Meinung nach dann Sinn wenn du Variablen nutzt die sehr große Datenmengen enthalten und bevor diese von alleine gelöscht wird noch einiges anderes passiert und du somit nicht mega viel Speicher allokierst.

    Angenommen du machst alles prozedural und includest einfach Skript für Skript, dann kannst du natürlich am Ende jedes Skriptes bestimmte Variablen löschen ...

    Kommentar


    • #3
      Der Einsatz von unset kommt auch ganz auf den Anwedungszweck an.

      Beispiel:

      Wenn ich in einer Methode mit einem Array arbeiten muss was ich mit einer Schliefe durchlaufe und aber mittendrin Elemente löschen muss, dann verwende ich auch zum Teil unset.

      Oder bei einem Logoutvorgang benutze ich das auch, wenn ich erreichen will das der Benutzer nach dem Logout zwar seine Indentifikationsvariable verliert, aber dennoch Session Daten benötigt um weiter auf der Seite zu surfen. Somit fällt ein session_unset() oder session_destroy() flach, aber ein unset($_SESSION['id']) bewirkt was ich will.
      Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
      [URL]http://www.lit-web.de[/URL]

      Kommentar


      • #4
        Ja das stimmt, da hab ich grad gar nicht dran gedacht. Ich hab grad mal mein Projekt nach unset() durchsucht, es kommt immer dann zum Einsatz wenn ich Werte aus einem Array lösche ...

        Kommentar


        • #5
          Zitat von Flor1an Beitrag anzeigen
          es kommt immer dann zum Einsatz wenn ich Werte aus einem Array lösche ...
          Sieht bei mir nicht anders aus.

          Kommentar


          • #6
            Anderer klassischer unset-Fall ist die Manipulation mehrer Bilder mit der GD wenn das memory_limit nicht ausreicht bzw. an der Stelle meist eher image_destroy().
            "Alles im Universum funktioniert, wenn du nur weißt wie du es anwenden musst".

            Kommentar


            • #7
              Ich nutz unset() immer bei XML-Importen. Mitunter gibt es dort große Arrays/Objekte die bei einem einzelnen XML-File kein Problem sind, aber sobald mehr als ein XML in einem Importlauf verwendet wird, frisst das richtig Ressourcen. Meist können die Arrays und Objekte auch nicht sauber gelöscht werden, da zuviele Referenzen untereinander bestehen.
              PHP online testen, zum Beispiel: md5, base64_decode, preg_match, urldecode und viele weitere...

              Kommentar


              • #8
                Der einzige Fall, in dem ich konsequent auf unset setze, ist bei Schleifen mit Referenzen. Wegen dieser Geschichte hier:

                PHP-Code:
                <?php

                $array 
                = array('a''b''c''d');

                foreach (
                $array as &$v) {}

                foreach (
                $array as $v) {}

                print_r($array);

                /*
                Array
                (
                    [0] => a
                    [1] => b
                    [2] => c
                    [3] => c
                )
                */
                (Ein unset($v); hinter der ersten Schleife "repariert" das Beispiel.)

                In manchen Fällen lässt sich ein doppelter Speicherverbrauch durch unset vermeiden, aber wirklich notwendig oder anwendbar ist das sicher selten.

                - http://blog.preinheimer.com/index.ph...ge-in-PHP.html

                Beispiel dazu:

                PHP-Code:
                foreach (glob('./rather-big-files/*') as $file) {
                    
                $data file_get_contents($file);    

                    
                // Do some work with the data

                    // Free memory
                    
                unset($data);

                Ohne das unset müssten wohl zwei der Dateien gleichzeitig im Speicher gehalten werden.

                Kommentar


                • #9
                  Zum Beispiel: Über einen mehrseitigen Prozess werden Daten im Session-Array gespeichert. Irgendwann sind alle Prozessschritte durchlaufen und die Daten der Session in die DB gewandert. Dann kommt ein unset($_SESSION['ProzessDatenArray']) um beim erneuten Durchlauf des Prozesses wieder "frisch" anfangen zu können.
                  [B]Es ist schon alles gesagt. Nur noch nicht von allen.[/B]

                  Kommentar


                  • #10
                    @drsoong

                    Denselben Gedanke habe ich auch. Konkretes Beispiel: Warenkorb im Verbund mit dem Checkout-Prozess bei einem Shop.

                    Kommentar


                    • #11
                      unset() gibt keinen Speicher frei. Die Variable wird nur als „zu entsorgen“ markiert. Rest erledigt der GC wenn er gerade Lust dazu hat. Wer unset() also einsetzt, um Speicher zu sparen, der sollte lieber $variable = null nutzen. Letzteres überschreibt den Speicher, kostet aber auch CPU-Takte.
                      Refining Linux: “[url=http://www.refining-linux.org/archives/65/Performing-push-backups-Part-1-rdiff-backup/]Performing Push Backups – Part 1: rdiff-backup[/url]”

                      Kommentar


                      • #12
                        Wenn mit "Speicher sparen" gemeint ist, "innerhalb des zur Verfügung stehenden Memory Limits bleiben", sollte unset ausreichen.

                        unset() does just what it's name says - unset a variable. It does not force immediate memory freeing. PHP's garbage collector will do it when it see fits - by intention as soon, as those CPU cycles aren't needed anyway, or as late as before the script would run out of memory, whatever occurs first.
                        - http://stackoverflow.com/questions/5...et-or-var-null

                        Mal wieder schwierig, gute Quellen dazu zu finden.

                        Kommentar

                        Lädt...
                        X