ID: 37046 Updated by: [EMAIL PROTECTED] Reported By: karoly at negyesi dot net -Status: Assigned +Status: Closed Bug Type: Scripting Engine problem Operating System: Linux PHP Version: 4CVS-2006-04-12 Assigned To: dmitry New Comment:
Fixed in PHP_4_4 too. Previous Comments: ------------------------------------------------------------------------ [2006-04-12 21:57:06] [EMAIL PROTECTED] Dmitry, please also fix this in PHP 4.4. ------------------------------------------------------------------------ [2006-04-12 14:07:26] karoly at negyesi dot net Please fix in 4.x, too. Thanks. ------------------------------------------------------------------------ [2006-04-12 11:38:58] [EMAIL PROTECTED] Fixed in CVS HEAD and PHP_5_1. ------------------------------------------------------------------------ [2006-04-12 10:35:21] [EMAIL PROTECTED] The simplified example: Reproduce code: --------------- <?php function s() { static $storage = array(array('x', 'y')); return $storage[0]; } foreach (s('a') as $k => $function) { echo "op1 $k\n"; if ($k == 0) { foreach (s('a') as $k => $function) { echo "op2 $k\n"; } } } ?> Expected result: ---------------- op1 0 op2 0 op2 1 op1 1 Actual result: -------------- op1 0 op2 0 op2 1 The bug is similar to bug #35106 (nested foreach fails when array variable has a reference), but has different reason. ------------------------------------------------------------------------ [2006-04-12 00:08:05] karoly at negyesi dot net I thought best is if I provide one script... <?php function s($key) { static $storage = array('a' => array('x', 'y')); return $storage[$key]; } function s1($key) { static $storage = array('a' => array('x', 'y')); return (array)$storage[$key]; } function s2() { static $storage = array('x', 'y'); return $storage; } function invoke($op, $st) { foreach ($st('a') as $k => $function) { echo "$op $k\n"; $function($op, $st); } } function x($op, $st) { if ($op == 'op1') invoke('op2', $st); } function y() { } invoke('op1', 's'); echo "\n"; invoke('op1', 's1'); echo "\n"; invoke('op1', 's2'); ?> You get op1 0 op2 0 op2 1 op1 0 op2 0 op2 1 op1 1 op1 0 op2 0 op2 1 op1 1 if this is not a bug then why they differ? ------------------------------------------------------------------------ The remainder of the comments for this report are too long. To view the rest of the comments, please view the bug report online at http://bugs.php.net/37046 -- Edit this bug report at http://bugs.php.net/?id=37046&edit=1