【问题标题】:$GLOBALS array_walk_recursive$GLOBALS array_walk_recursive
【发布时间】:2014-01-30 00:05:41
【问题描述】:

我有以下代码

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'] 和 global $a 是相等的。

全局变量 $maxim 的示例:

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

【问题讨论】:

  • 你应该问自己是否真的应该使用全局变量?
  • 为什么要启用这种被禁止的功能?
  • 但是没有全局变量我怎么能记住多维数组的最大值呢?
  • @aliz_andrei - static 变量可能更合适。
  • @Spudley 它也不适用于静态变量。它仅适用于 $GLOBALS。

标签: php global


【解决方案1】:

假设您使用的是 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 在三年前被宣布终止使用,如果是这种情况,那么您应该紧急考虑升级。

【讨论】:

  • 我使用的是 PHP 5.5.3,语法似乎发生了变化。现在应该是:array_walk_recursive($arr,function($item,$key) use (&$maxim) {if($item > $maxim) $maxim = $item;}));
猜你喜欢
  • 2014-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-10
  • 2014-04-07
  • 2012-03-29
  • 2014-08-04
  • 1970-01-01
相关资源
最近更新 更多