[Funktion] Wann setzt man unset() ein?

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • [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);

    Comment


    • #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

      Comment


      • #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.

        Comment

        Working...
        X