是否可以设置仅在函数内全局变量?

时间:2011-06-21 16:38:20

标签: php

这是匿名函数可见的变量,也是主函数。我问因为array_walk_recursive只允许一个额外的参数,能够从匿名函数到达某些变量而不依赖于常量压缩和提取

会很好

3 个答案:

答案 0 :(得分:3)

关闭可以:

function() use ($var) { /*code*/}

使用use(vars)关闭函数中的这些变量。

无法发布官方使用文档的链接,因为php.net缺少

答案 1 :(得分:1)

如果要将多个参数传递给array_walk_recursive,请将它们作为数组传递:

array_walk_recursive($data, 'callbackFn', array('arg1', new Foo, $bar));

在回调中,您可以通过数组索引访问每个附加参数。

示例(demo

$data = range(1, 10);
array_walk_recursive(
    $data,
    function(&$value, $key, $args)
    {
        $value = $value * $args[0] * $args[1] * $args[2];
    },
    array(3, 6, 7)
);
print_r($data);

答案 2 :(得分:-1)

通过__invoke将对象用作函数可以是闭包的有用替代方法:

<?php
class Walker
{
  public function __construct($a, $b)
  {
    $this->a = $a;
    $this->b = $b;
  }

  public function __invoke($val, $key)
  {
    if ($val == $this->a || $val == $this->b)
      echo "$key\n";
  }
}

$a = array('the', 'quick', 'brown', 'fox', 'jumps', 'over', 'the', 'lazy', 'dog');

array_walk($a, new Walker('quick', 'dog'));

显然它更冗长,但当你做的不仅仅是一个简单的任务时,它可以更容易理解。