|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
[2009-09-23 11:29 UTC] sjoerd@php.net
[2009-09-23 14:48 UTC] alhajaj at yahoo dot com
|
|||||||||||||||||||||||||||
Copyright © 2001-2026 The PHP GroupAll rights reserved. |
Last updated: Fri Feb 13 20:00:01 2026 UTC |
Description: ------------ when passing an object by value to a function it alters the original object and not a copy of it. Here is a script to reproduce it. I included the handling for passing strings which works as expected unlike passing objects. Reproduce code: --------------- <?php class User { var $name; function User(){$this->name = "tony";} } function changeUserByRef(&$user) { $user->name = "changeUserByRef";} function changeUserByValue($user) { $user->name = "changeUserByValue";} function changeStringByRef(&$str) { $str = "changeStringByRef";} function changeStringByValue($str) { $str = "changeStringByValue";} $user = new User(); echo($user->name . '</br>' ); changeUserByRef($user); echo("changeUserByRef = " . $user->name . '</br>' ); $user->name = "tony"; echo($user->name . '</br>' ); changeUserByValue($user); echo("changeUserByValue = ". $user->name . '</br>' ); echo('<hr />'); $user->name = "tony"; echo($user->name . '</br>' ); changeStringByRef($user->name); echo("changeStringByRef = " . $user->name . '</br>' ); $user->name = "tony"; echo($user->name . '</br>' ); changeStringByValue($user->name); echo("changeStringByValue = " . $user->name . '</br>' ); ?> Expected result: ---------------- tony changeUserByRef = changeUserByRef tony changeUserByValue = tony --------------------------------------------------- tony changeStringByRef = changeStringByRef tony changeStringByValue = tony Actual result: -------------- tony changeUserByRef = changeUserByRef tony changeUserByValue = changeUserByValue --------------------------------------------------- tony changeStringByRef = changeStringByRef tony changeStringByValue = tony