Objekt als Referenz übergeben?

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

  • Objekt als Referenz übergeben?

    Hallo zusammen,

    mir ist durchaus bekannt, dass in PHP5 bei der Erzeugung von Objekten Referenzen zurückgeliefert werden

    PHP-Code:
    $obj_new = new BeispielKlasse(); 
    $obj_new ist jetzt eine Referenz auf das Objekt.
    Was passiert aber, wenn ich diese Variable an eine Funktion weitergebe? Damit wird doch eigentlich eine (Funktions-)lokale Kopie der Variable erzeugt, oder?

    PHP-Code:
    echo irgendeine_funktion($obj_new); 
    Natürlich kann ich das umgehen, indem ich in der Funktionsdeklaration folgendes mache:

    PHP-Code:
    function irgendeine_funktion(BeispielKlasse &$obj_new) (
      
    // $obj_new wird hier nicht gebraucht, geht nur ums Prinzip
      
    return 'test-ausgabe';

    Macht das so Sinn oder habe ich einen Denkfehler?
    Ich möchte so wenig "Overhead" erzeugen wie möglich ...

    Freue mich auf Antworten!

    $getphp->displayGreetings();

  • #2
    PHP-Code:
    <?php
    class Foo {
        public 
    $foo;
        
        public function 
    __construct($foo 'foo') {
            
    $this->foo $foo;
        }
    }

    function 
    bar(Foo $foo) {
        
    $foo->foo 'bar';
    }

    $foo = new Foo();
    bar($foo);
    print 
    $foo->foo;
    ?>
    ergibt
    Code:
    bar
    Nichts auf der Welt ist so gerecht verteilt wie der Verstand. Denn jedermann ist davon überzeugt, dass er genug davon habe – René Descartes
    PHP Sicherheit
    PHPUnit[1-2]
    Professionelle Softwareentwicklung mit PHP 5
    Professionelle PHP 5-Programmierung

    Kommentar


    • #3
      Genau ;-) ... danke für die Denkhilfe!

      Kommentar


      • #4
        Ich würde das nicht als "umgehen nennen", sondern "anders gehts nicht".

        du schreibst eigentlich schon die lösung. php erzeugt eine kopie von der variablen (aber nicht von dem Objekt) das heisst du übergibst der funktion irrgend eine adresse vom speicher aber nicht das Objekt.

        daher kannst du nur mit dem & parameter arbeiten.

        Kommentar


        • #5
          php4 hatte noch kopien erstellt
          php5 liefert bei objekten immer nur eine referenz

          will man eine echte kopie, verwende clone:

          PHP-Code:
          class foobar {

            public 
          $var 'foo';

          }

          $foo = new foobar();
          $bar = clone $foo;
          $bar->var 'bar';

          printf('foo: %s -- bar: %s'$foo->var$bar->var); 
          Code:
          foo: foo -- bar: bar
          mfg,
          [color=#0080c0]Coragon[/color]

          Kommentar

          Lädt...
          X