ID: 16033
Updated by: [EMAIL PROTECTED]
-Summary: Can't return reference to class member variable from
class method.
Reported By: [EMAIL PROTECTED]
-Status: Open
+Status: Bogus
Bug Type: Class/Object related
Operating System: RedHat Linux 7.2, BeOS
PHP Version: 4.1.2
New Comment:
Whoops, I messed up. Sorry!
Previous Comments:
------------------------------------------------------------------------
[2002-03-13 02:45:24] [EMAIL PROTECTED]
References are screwy when returned from object methods. Witness the
following (a script to illustrate the trouble):
---------
class StringList
{
var $strings = array();
function &AddString( $a_string )
{
$this->strings[] = $a_string;
/* return a reference to newly added item */
return( $this->strings[count($this->strings)-1] );
}
}
$stringvar = "Hello World" ;
$x = new StringList;
$y = &$x->AddString( $stringvar );
/* this should change $x->strings[0], but does not! */
$y = "I love PHP!" ;
/* This should NOT fail, but it does! */
assert( $y == $x->strings[0] );
---------
One could reasonably infer that because $y is a reference to
$x->strings[0], modifying $y would also cause $x->strings[0] to be
modified.
THIS IS NOT THE CASE. After the call to AddString, $y is a COPY of
$x->strings[0], which is NOT modified when we change $y's value.
Also, if I were to call AddString as $x->AddString("Some string"),
$x->strings
is no longer an array and print_r($x->strings) screams *RECURSION*!
This is
weird, because I am passing in the string using copy, and returning a
reference
to the added copy.
If this is the correct behavior, I'll eat my hat.
The configure line specified --without-mysql, --without-pear, and my
prefix.
That's all.
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=16033&edit=1