$ GLOBALS array_walk_recursive

时间:2014-01-29 15:38:05

标签: 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'];
    }

为什么这个函数适用于$ 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;
    }

1 个答案:

答案 0 :(得分:0)

假设您使用的是PHP 5.3,则可以使用正确的内联函数,而不是使用笨重的旧create_function()语法。

array_walk_recursive($arr,function($item,$key) use $maxim {if($item > $maxim) $maxim = $item;}));

注意use $maxim位 - 此语法允许您将局部变量传递给内联函数。使用create_function()无法做到这一点。

正如我所说,这适用于PHP 5.3及更高版本。如果您使用的是PHP 5.2或更早版本,那么您将无法使用上述语法。但是,由于PHP 5.2在三年前被宣布为生命终止,如果是这种情况,那么你应该紧急考虑升级。