Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Referenzen zurückgeben

Einklappen

Neue Werbung 2019

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

  • hoctar
    hat ein Thema erstellt [Erledigt] Referenzen zurückgeben.

    [Erledigt] Referenzen zurückgeben

    Hallo
    bei Joomla sehe ich öfters Methoden die wie folgt ausehen: &getInstance()
    Diese Methode gibt ein Object zurück, nun frage ich mich wofür das '&' am Anfang steht. Klar es soll eine Referenz zurückgegeben werden, aber ist es denn nicht das Standardverhalten ? Werden Objekte nicht immer als Referenz zurückgegeben ?

    PHP-Code:
    class {

            var 
    $obj;

            function 
    __construct($obj) {
                    
    $this->obj $obj;
            }
            
            function &
    getObj() {
                    return 
    $this->obj;
            }
            
            function 
    getObj2() {
                    return 
    $this->obj;
            }

    }


    class 
    {

            var 
    $b 'b';
            var 
    $a 'a';

    }

    $b = new B;
    $a = new A($b);

    $obj $a->getObj();
    $obj->'123';

    $obj2 $a->getObj2();
    $obj2->'abc';

    echo 
    '<pre>'print_r($obj); echo '</pre>';
    echo 
    '<pre>'print_r($obj2); echo '</pre>'
    Also in diesem Beispiel unterscheide ich die beiden Mehoden &getObj() und getObj().
    Beide geben eine Referenz zu Objekt B, somit ist das Resultat am Ende gleich, denn im Spiecher wurde stets auf ein und die selben Werte zurückgegriffen.

    Was macht das '&' nun für ein unterschied ?

  • hoctar
    antwortet
    Verstehe, vielen dank für die Infos

    Einen Kommentar schreiben:


  • nikosch
    antwortet
    PS:
    PHP-Code:
    <?php

    class {

            function 
    __construct() {
                    
    $this->obj = new b;
            }
            
            function & 
    getObj() {
                    return 
    $this->obj;
            }

            function 
    getObj2() {
                    return 
    $this->obj;
            }
    }

    class 
    {}




    $a = new a;

    $b $a->getObj();

    var_dump ($a);

    $b null;

    var_dump ($a);



    $a = new a;

    $b = & $a->getObj();

    var_dump ($a);

    $b null;

    var_dump ($a);



    $a = new a;

    $b = & $a->getObj2();

    var_dump ($a);

    $b null;

    var_dump ($a);
    Code:
    object(a)#1 (1) {
      ["obj"]=>
      object(b)#2 (0) {
      }
    }
    object(a)#1 (1) {
      ["obj"]=>
      object(b)#2 (0) {
      }
    }
    object(a)#3 (1) {
      ["obj"]=>
      &object(b)#4 (0) {
      }
    }
    object(a)#3 (1) {
      ["obj"]=>
      &NULL
    }
    <br />
    <b>Strict Standards</b>:  Only variables should be assigned by reference in ...
    object(a)#4 (1) {
      ["obj"]=>
      object(b)#1 (0) {
      }
    }
    object(a)#4 (1) {
      ["obj"]=>
      object(b)#1 (0) {
      }
    }

    Einen Kommentar schreiben:


  • fab
    antwortet
    Nimm dir kein Beispiel an Joomla, guter Code sieht anders aus! In einem Punkt hast du recht, die Rückgabe als Referenz macht in einem solchen Beispiel keinen Sinn. Einen Unterschied macht es aber schon, denn Objekte werden nicht standardmäßig als Referenzen zurückgegeben!.

    Den Unterschied siehst du wenn du am Ende deines Beispiels einmal folgendes anhängst:
    PHP-Code:
    $obj null;
    var_dump($a); 
    das machst du einmal mit & in der Methode und einmal ohne.

    Zum genaueren Verständnis zum Thema Objekte und Referenzen, lies dir dann auch mal den Abschnitt im Manual durch:
    PHP: Objekte und Referenzen - Manual

    Einen Kommentar schreiben:


  • nikosch
    antwortet
    Objekte als Referenz sind erst ab PHP5 Standardverhalten. Genau genommen ist die Referenz, die so angelegt wird auch noch eine andere.

    PHP: Referenzen in PHP - Manual

    Einen Kommentar schreiben:

Lädt...
X