Wolfram Kriesing writes:
> why do the following two examples result in different things, even 
> though i would expect the same behaviour?

>From the manual:

  http://www.php.net/manual/en/language.references.return.php
 
  function &find_var ($param)
  {  
      ...code...
      return $found_var;
  }

  $foo =& find_var ($bar);
  $foo->x = 2;

  In this example, the property of the object returned by the find_var
  function would be set, not the copy, as it would be without using
  reference syntax.

  Note: Unlike parameter passing, here you have to use & in both
  places - to indicate that you return by-reference, not a copy as
  usual, and to indicate that reference binding, rather than usual
  assignment, should be done for $foo.

...in other words, your problem is here:

> $test = new test;
> // but this one does NOT !!!
> $walk = $test->getData(0);
       ^^^

...it should be:

$walk =& $test->getData(0);

> $walk = $test->data[1];
> print('<br>');
> print_r($test);


Cheers,

Torben



> in words: i pass a reference of a class-property to a variable $walk, 
> if i overwrite $walk, the class-property has a new value too (seems 
> logical, since we are working with references not pointers)
> BUT
> if i use a class-method which returns a reference to this 
> class-property, to set $walk ... and then i overwrite $walk the 
> class-property didnt change
> 
> 
> code-example
> <?php
> 
> class test
> {
>     var $data;
>     function test()
>     {
>         $this->data[0] = 'level zero';
>         $this->data[1] = 'level one';
>     }
> 
>     function &getData( $id )
>     {
>         return $this->data[$id];
>     }
> }
> 
> $test = new test;
> print('<br>');
> print_r($test);
> 
> // the following block overwrites $test->data[0] with $test->data[1]
> $walk = &$test->data[0];
> $walk = $test->data[1];
> print('<br>');
> print_r($test);
> 
> 
> $test = new test;
> // but this one does NOT !!!
> $walk = $test->getData(0);
> $walk = $test->data[1];
> print('<br>');
> print_r($test);
> 
> ?>
> 
> -- 
> Wolfram
> 
> -- 
> PHP Development Mailing List <http://www.php.net/>
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> To contact the list administrators, e-mail: [EMAIL PROTECTED]
> 

-- 
 Torben Wilson <[EMAIL PROTECTED]>
 http://www.thebuttlesschaps.com
 http://www.hybrid17.com
 http://www.inflatableeye.com
 +1.604.709.0506


-- 
PHP Development Mailing List <http://www.php.net/>
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]

Reply via email to