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

Reply via email to