在array_filter中传递数组而不是回调

时间:2012-07-30 07:04:13

标签: php

我正在查看此示例array_filter comment并将参数传递给array_filter

array_filter($subject, array(new array_ereg("image[0-9]{3}\.png"), 'ereg')

回调如何接受具有多个参数的数组,其中一个参数是实际的回调函数

4 个答案:

答案 0 :(得分:1)

在PHP中,可以使用以下格式的数组来表示callable

array($object, 'methodName')

文档本身说明:

  

实例化对象的方法作为数组传递,该数组包含索引为0的对象和索引为1的方法名称。

很常见的是,这与对象内的$this变量一起使用。

在您的示例中,数组的第一个元素是使用new创建的,并且是所需的实例化对象,ereg是方法。

答案 1 :(得分:1)

array_filter函数需要callable作为第二个参数。 PHP将array($instance, 'methodname')理解为实例方法可调用,并将静态方法array('classname', 'staticmethodname')理解为自版本5.2.3以来的简单'classname::staticmethod'

答案 2 :(得分:0)

扩展其他答案。在PHP> = 5.3中,我们可以使用闭包。

$numbers = range(1,10);
$newNumbers = array_filter($numbers, function($value) {
    return ($value & 1) === false;
});
// $newNumbers now contains only even integers. 2, 4, 6, 8, 10.

答案 3 :(得分:0)

查看PHP: Callbacks页面。

可调用参数指定数组时,您指定该对象的对象方法。例如:

$object = new MyClass();
array_filter($input, array($object, 'myClassMethod'));

在您提供的示例中:

array_filter($subject, array(new array_ereg("image[0-9]{3}\.png"), 'ereg');

array_ereg 的新实例是对象 ereg 是array_ereg类的方法。< / p>