[Funktion] Wann setzt man unset() ein?

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

  • [Funktion] Wann setzt man unset() ein?

    Hallo,


    Der Titel ist die Frage


    MfG Floriam


    @mrhappiness: Bin auch ein bisschen Wortkarg heute
    PHP Handbuch - MySQL Handbuch - PHP Einsteiger Tutorial - CSS Referenz - Browserunterstützung von CSS

  • #2
    Dann, wenn man eine Variable nicht mehr braucht. Ok, ein simples Beispiel: Man hat eine Schleife, die aus einem Array Objekte erstellt und diese dann in ein anderes Objekt einträgt. Dieses übertragen wird by reference erledigt. Dann sollte man nach dem Übertragen die Variable entfernen, um die Referenz auszuheben.

    PHP-Code:
    $page = new Page();
    $page->setTitle('Beispiel');
    $elements =  array('element1''element2');
    foreach(
    $elements as $element) {
        
    $obj = new HTMLElement();
        
    $obj->setName($element);
        
    $page->register($obj);
        unset(
    $obj);

    Kommentar


    • #3
      Hallo!

      Zu dem Codebeispiel hätte ich jetzt aber auch eine Frage. Ist es nicht sinnvoll, innerhalb der foreach-Schleife dem new ein & voranzustellen? Also so:
      PHP-Code:
      $obj = &new HTMLElement(); 
      Wäre schön wenn mir das jemand mal auseinanderschrauben könnte.

      Danke!

      Gruss

      Yezariel
      mens agitat molem

      Kommentar


      • #4
        Original geschrieben von yezariel
        Hallo!

        Zu dem Codebeispiel hätte ich jetzt aber auch eine Frage. Ist es nicht sinnvoll, innerhalb der foreach-Schleife dem new ein & voranzustellen? Also so:
        Ob es sinnvoll ist oder nicht, liegt meiner Meinung nach an der Größe des Objektes und an der Implementation des Konstrukturs. Das & vor dem new dient dazu, dass von dem Objekt eine Instanz und nicht eine Kopie - wie normalerweise bei PHP 4 - zurückgegeben wird. Das heißt also, dass das 'einfache' new ein Objekt erstellt, dieses aber nicht direkt an die Variable zuweist, sondern nur deren Kopie.
        Also könnte man letzendlich bei jedem Objektinstanzierung die Referenz & angeben. Notwendig ist es z.B. dann, wenn man einen Pseudo-Destruktur registrieren will:
        PHP-Code:
        class foo
        {
            function 
        foo() {
                
        register_shutdown_function(array(&$this'destructor'));
            }
            function 
        destructor() {
                
        // macht irgendetwas
            
        }
        }
        // wird nicht das gewünschte Ergebnis bringen, 
        //da $this im Konstruktor nicht identisch mit $a ist
        $a = new foo(); 
        // korrekte Verwendung
        $b = &new foo(); 
        Wenn man dies nicht weiß, kann es zu eigenartigen Fehlverhalten führen. Mehr zu dem Thema kann man im Manual unter 'Referenzen innherhalb des Konstruktors' finden.

        Kommentar

        Lädt...
        X