Mailinglisten-Archive |
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