|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
[2002-05-15 08:27 UTC] kubo at isite dot co dot jp
[2002-10-24 16:18 UTC] iliaa@php.net
|
|||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Fri Oct 24 20:00:01 2025 UTC |
Hi, I falied in passing by reference using call_user_function(). In case 2 and 5, I expect that $a and $b are overwritten by MyMethod or MyFunction. However, they were not overwritten. Is this right doing? Or is my understanding wrong? Regards, KUBO Atsuhiro test code: <?php class MyClass { function MyMethod(&$arg1, &$arg2) { $arg1 = 'foo'; $arg2 = 'bar'; } } print "case 1:\n"; $a = 1; $b = 2; print '$a = ' . $a . "\n"; print '$b = ' . $b . "\n"; print "case 2:\n"; $a = 1; $b = 2; $obj = new MyClass; call_user_func(array(&$obj, 'MyMethod'), $a, $b); print '$a = ' . $a . "\n"; print '$b = ' . $b . "\n"; print "case 3:\n"; $a = 1; $b = 2; call_user_func(array(&$obj, 'MyMethod'), &$a, &$b); print '$a = ' . $a . "\n"; print '$b = ' . $b . "\n"; print "case 4:\n"; $a = 1; $b = 2; MyFunction($a, $b); print '$a = ' . $a . "\n"; print '$b = ' . $b . "\n"; print "case 5:\n"; $a = 1; $b = 2; call_user_func('MyFunction', $a, $b); print '$a = ' . $a . "\n"; print '$b = ' . $b . "\n"; print "case 6:\n"; $a = 1; $b = 2; call_user_func('MyFunction', &$a, &$b); print '$a = ' . $a . "\n"; print '$b = ' . $b . "\n"; exit(); function MyFunction(&$arg1, &$arg2) { $arg1 = '1st'; $arg2 = '2nd'; } ?> output: $a = 1 $b = 2 case 2: $a = 1 $b = 2 case 3: $a = foo $b = bar case 4: $a = hoge $b = huge case 5: $a = 1 $b = 2 case 6: $a = hoge $b = huge ?>