ID: 33061 Updated by: [EMAIL PROTECTED] Reported By: online at natweiss dot com -Status: Open +Status: Assigned Bug Type: Class/Object related Operating System: * -PHP Version: 4.3.*, 4.4.0RC1 +PHP Version: 4CVS-2005-06-21 Assigned To: dmitry New Comment:
Dmitry: The catch is that you need to call some method in the object. Then it suddenly is passed by reference, otherwise it behaves as you'd expect. (Note: it's PHP4, not 5. :) Previous Comments: ------------------------------------------------------------------------ [2005-06-20 23:30:30] online at natweiss dot com 1) Bug still exists in PHP 4.4.0RC1. 2) Simplified example does not produce actual results consistent with sniper at php.net's results in PHP 4.3.10 or 4.4.0RC1. See output: php -v ====== PHP 4.4.0RC1 (cli) (built: Jun 18 2005 21:49:33) Copyright (c) 1997-2004 The PHP Group Zend Engine v1.3.0, Copyright (c) 1998-2004 Zend Technologies Original Reproduce Code Output ============================== member->val should be empty! something Object ( [member] => something Object ( [val] => 1 ) ) Simplified Example ================== <?php class something{ var $val = 0; } function pass_by_value($value){ $value->val=1; } $object = new something; var_dump($object); pass_by_value($object); var_dump($object); ?> Actual Results of Simplified Example ==================================== object(something)(1) { ["val"]=> int(0) } object(something)(1) { ["val"]=> int(0) } ------------------------------------------------------------------------ [2005-06-20 20:29:51] [EMAIL PROTECTED] PHP5 always pass and assign objects by reference. You should set "zend.ze1_compatibility_mode=1" if you like PHP4 behavior. ------------------------------------------------------------------------ [2005-06-19 02:12:55] [EMAIL PROTECTED] ATTENTION: This does NOT happen with PHP_4_4 !! Simplified example: <?php class something { public $val = 0; } function pass_by_value($value) { $value->val = 1; } $object = new something; var_dump($object); pass_by_value($object); var_dump($object); ?> Expected result: ---------------- int(0) int(0) Actual result: -------------- int(0) int(1) ------------------------------------------------------------------------ [2005-05-19 02:39:30] online at natweiss dot com Description: ------------ See reproduce code. php.ini is stock / no changes. Reproduce code: --------------- <?php // a class that does nothing class something{ function nothing(){ } } // a pass-by-value function that modifies a member's member function pass_by_value($value){ $value->member->val = 1; } // create a something with a member something $object = new something; $object->member = new something; // call nothing, then call pass_by_value and print results $object->member->nothing(); echo "member->val should be empty!\n"; pass_by_value($object); print_r($object); ?> Expected result: ---------------- $object->member should be empty Actual result: -------------- $object->member->val == 1 ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=33061&edit=1