ID: 42271 Updated by: [EMAIL PROTECTED] Reported By: rodji at tut dot by -Status: Open +Status: Bogus Bug Type: Scripting Engine problem Operating System: Win32 XP sp2.2600 PHP Version: 5.2.3 New Comment:
You extract $a and $b which both reference the same value so if you change either both change. No bug here -> bogus. Previous Comments: ------------------------------------------------------------------------ [2007-08-11 23:58:51] rodji at tut dot by Reproduce code: --------------- function /*&*/f($val) { //eq &f $r['a'] = $val; //equal =& $r['b'] = $val; //equal =& return $r; } //debug_zval_dump(f('old')); extract(f('old_value'), EXTR_REFS); //$t =& f('old_value'); extract($t, EXTR_REFS); unset($t); $a = 'new_value'; debug_zval_dump (&$b); Expected result: ---------------- &string(9) "old_value" refcount(2) Actual result: -------------- &string(9) "new_value" refcount(3) ------------------------------------------------------------------------ [2007-08-11 22:32:01] [EMAIL PROTECTED] Can you provide some simpler example which makes a bit more sense..? ------------------------------------------------------------------------ [2007-08-11 09:29:05] rodji at tut dot by Description: ------------ Tested on: Apache/1.3.33 (Win32) PHP/4.4.7 and 5.2.3 trouble with references in functions Reproduce code: --------------- function args_select($args, $args_list, $def_val) { $r = array(); foreach ($args_list as $key) { if (array_key_exists($key, $args)){ $r[$key] = $args[$key]; }else{ $r[$key] = $def_val; //equal $r[$key] =& $def_val why??? //$r[$key] = (string)$def_val; //solution#1 } } return $r; } $argums = array('action'=>'edit', 'id'=>1); $select = array('action','to_do','back'); //debug_zval_dump(args_select($argums, $select, '')); extract(args_select($argums, $select, ''), EXTR_OVERWRITE | EXTR_REFS); //solution#2 why??? /*$m = args_select($argums, $select, ''); //OR //$m =& args_select($argums, $select, ''); extract($m, EXTR_OVERWRITE | EXTR_REFS); */ $to_do = 'new'; debug_zval_dump (&$back); ?> Expected result: ---------------- &string(0) "" refcount(2) Actual result: -------------- &string(3) "new" refcount(3) ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=42271&edit=1