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


is it possible to set variables that are global only within a function?

这是匿名函数在主函数中可见的变量。我问,因为array_walk_recurive只允许一个额外的参数,所以能够从匿名函数中访问一些变量而不依赖于常量压缩和提取是很好的

闭包可以:

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

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

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

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

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

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

示例(演示)

$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);

通过__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'));

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