Php $GLOBALS数组\u walk\u递归

Php $GLOBALS数组\u walk\u递归,php,globals,Php,Globals,我有以下代码 function MaximArray($arr) { $GLOBALS['maxim'] = 0; array_walk_recursive($arr,create_function('$item,$key','if($item > $GLOBALS["maxim"]) $GLOBALS["maxim"] = $item;')); return $GLOBALS['maxim']; } 为什么这个函数与$GL

我有以下代码

function MaximArray($arr)
    {
        $GLOBALS['maxim'] = 0;
        array_walk_recursive($arr,create_function('$item,$key','if($item > $GLOBALS["maxim"]) $GLOBALS["maxim"] = $item;'));
        return $GLOBALS['maxim'];
    }
为什么这个函数与$GLOBALS['maxim']一起工作,但如果我在函数内部声明一个变量作为全局变量并使用它,它就不工作了?我了解到$GLOBALS['a']和全局$a是相等的

全局变量$maxim的示例:

$maxim=0;
    function MaximArray($arr)
    {
        global $maxim;
        array_walk_recursive($arr,create_function('$item,$key','if($item > $maxim) $maxim = $item;'));
        return $maxim;
    }

假设您使用的是PHP5.3,您可以使用适当的内联函数,而不是笨重的
create\u function()
语法

array_walk_recursive($arr,function($item,$key) use $maxim {if($item > $maxim) $maxim = $item;}));
注意
use$maxim
位——此语法允许您将局部变量传递到内联函数中。使用
create_function()
无法实现这一点


正如我所说,这是针对PHP5.3和更高版本的。如果您使用的是PHP5.2或更早版本,那么上述语法将不可用。然而,由于PHP5.2在三年前被宣布为生命终结,如果是这样的话,那么你应该立即考虑升级。

你应该问问自己,你是否真的应该使用全局变量?为什么要启用这样一个禁止的功能?但是如果没有全局变量,我怎么能记住多维数组的最高值呢?@aliz_andrei-一个
静态
变量可能更有用适当。@Spudley它对静态变量也不起作用。它只适用于$GLOBALS,我使用的是PHP5.5.3,语法似乎已经改变了。现在是:
array\u walk\u recursive($arr,function($item,$key)use(&$maxim){if($item>$maxim)$maxim=$item;})