5.3之前的PHP匿名函数 - array_walk

时间:2010-10-05 21:43:42

标签: php arrays

是否可以将PHP array_walk与匿名函数一起使用(在PHP 5.3之前)?或者一些解决方法..

我在公共类方法中使用array_walk,我不想定义PHP函数..我想做类似的事情:

array_walk($array, function($value) {...});

如果不可能,可以使用类方法而不是函数吗?

4 个答案:

答案 0 :(得分:4)

使用create_function

array_walk($array, create_function('&$v, $k', '$v...'));

答案 1 :(得分:3)

是的,您可以将数组作为第二个参数传递,包含对象和方法名称为string:

class Foo {
    public function a($a) {
         array_walk($a, array($this, 'b')); 
    }
    private function b($v, $k) {
         print $v;
    }
}

$f = new Foo();
$f->a(array('foo', 'bar'));

打印

foobar

array_walk()的签名(可以在文档中找到),将第二个参数定义为callback,可以找到以下描述:

  

PHP函数的名称作为字符串传递。除了语言结构之外,可以使用任何内置或用户定义的函数,例如:array()echo()empty()eval()exit(),{ {1}},isset()list()print()

     

实例化对象的方法作为unset()传递,其中包含索引为0的对象和索引为1的方法名称。

     

也可以传递静态类方法,而无需通过传递类名而不是索引0处的对象来实例化该类的对象。

     

除了常见的用户定义函数外,array还可用于创建匿名回调函数。从PHP 5.3.0开始,也可以将闭包传递给回调参数。

答案 2 :(得分:2)

可以使用create_function()

从手册中窃取:

<?php
$av = array("the ", "a ", "that ", "this ");
array_walk($av, create_function('&$v,$k', '$v = $v . "mango";'));
print_r($av);
?>

答案 3 :(得分:1)

回答第二部分(第一部分回答得很好,我想,虽然我从来没有真正喜欢create_function):

  

如果不可能,可以使用类方法而不是函数吗?

是,分别为对象方法和静态方法传递array($instance,'methodname')array('classname','methodname')