phpbar.de logo

Mailinglisten-Archive

[php] Klassen - Referenz in Konstruktor

[php] Klassen - Referenz in Konstruktor

Jens Giessmann jg at handcode.de
Fre Mai 28 12:36:04 CEST 2004


Hi,

On Fri, May 28, 2004 at 12:09:48PM +0200, Christian Ruetgers wrote:
> Ich versuche einer Klasse als Eigenschaft eine Referenz auf eine andere 
> Klasse schon im Konstruktor mitzugeben. (siehe Codebeispiel).

[..]
> 
> Lösung?
> 
> 
> <?php
> 
> class c1 {
>         var $meinwert = 'leer';
> 
>         function c1() {
>                 ; // NOP
>         }
> }
> 
> class c2 {
>         var $_c1_obj = '';
> 
>         function c2($c1ref) {

Ich definiere den Parameter bei der Funktion sleber als Ref, nicht bei
deren Aufruf.

  function c2(&$c1ref) {

>                 $this->_c1_obj = $c1ref;

hier fehlt die Uebergabe als Ref. durch diese Zuweisung bekommst du
wieder eine Kopie, wenn ich es richtig sehe.

so klappt es.
    
                 $this->_c1_obj =& $c1ref; 



>         }
> 
>         function zeige_wert() {
>                 echo $this->_c1_obj->meinwert;
>         }
> }
> 
> $c1 = new c1();
> $c2 = new c2(&$c1);

hier kannst du es dann weglassen:

$c2 = new c2($c1); 


> //$c2->_c1_obj = &$c1;
> 
> $c1->meinwert = 'bin voll';
> $c2->zeige_wert();
> ?>

Bin mir mit der Erklaerung nicht 100% sicher, ausser, dass PHP eben
immer Kopien zurueck gibt, man daher also bei jeder
Zuweisung/Uebergabe das '&' fuer die Ref schreiben muss.

Vielleicht kann das ja aber hier noch jemand besser erklaeren.

Gruss Jens

php::bar PHP Wiki   -   Listenarchive