#43983 [Com]: Weird referencing with stdClass objects

From: Date: Mon, 07 Apr 2008 19:02:45 +0000
Subject: #43983 [Com]: Weird referencing with stdClass objects
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-124059@lists.php.net to get a copy of this message
ID: 43983 Comment by: ben at mailinator dot com Reported By: rubens21 at gmail dot com Status: Open Bug Type: Scripting Engine problem PHP Version: 5.2.5 New Comment: How is this weird? $test is an object. You store a reference to $test, and then you modify $test. Since you only stored a reference to the original object, of course you will see the new value when you print out the reference. This changed between PHP4 and PHP5. PHP4 stores a copy rather than a reference. If you are looking for the PHP4 behavior, you can use the "clone" keyword. e.g. $Objeto->valorDeTeste[] = clone $test; Previous Comments: ------------------------------------------------------------------------ [2008-02-24 20:17:54] rubens21 at gmail dot com I'm sorry, 'The same' = 'The same problem' CODE: $test = new stdClass(); $Objeto = new stdClass(); $test->valor = "The first value"; $Objeto->valorDeTeste[] = $test; $test->valor = "The second value"; echo "<pre>"; print_r($Objeto->valorDeTeste); echo "<br />"; var_dump($Objeto->valorDeTeste); echo "</pre>"; Array ( [0] => stdClass Object ( [valor] => The second value ) ) array(1) { [0]=> object(stdClass)#1 (1) { ["valor"]=> string(16) "The second value" } } ------------------------------------------------------------------------ [2008-02-24 19:44:21] jani@php.net That's impossible, the output of var_dump() differs a LOT from print_r(). So can you please really test it? ------------------------------------------------------------------------ [2008-02-23 17:04:12] rubens21 at gmail dot com "What does it output when you replace print_r() with var_dump() ?" R: The same ------------------------------------------------------------------------ [2008-02-01 22:28:15] jani@php.net What does it output when you replace print_r() with var_dump() ? ------------------------------------------------------------------------ [2008-01-30 15:40:53] rubens21 at gmail dot com This example is more simple: $test = new stdClass(); $Objeto = new stdClass(); $test->valor = "The first value"; $Objeto->valorDeTeste[] = $test; $test->valor = "The second value"; print_r($Objeto->valorDeTeste); Expected: Array ( [0] => stdClass Object ( [valor] => The first value ) ) Actual Array ( [0] => stdClass Object ( [valor] => The second value ) ) ------------------------------------------------------------------------ The remainder of the comments for this report are too long. To view the rest of the comments, please view the bug report online at http://bugs.php.net/43983 -- Edit this bug report at http://bugs.php.net/?id=43983&edit=1

« previous php.bugs (#124059) next »