【问题标题】:Passing array instead of callback in array_filter在 array_filter 中传递数组而不是回调
【发布时间】:2012-07-27 20:10:43
【问题描述】:

我正在查看此示例 array_filter comment,他将参数传递给 array_filter 作为

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

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

【问题讨论】:

  • 顺便说一句,ereg 函数已被弃用,您应该避免使用它们。

标签: php


【解决方案1】:

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

array($object, 'methodName')

文档本身说明:

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

在对象内部使用 $this 变量是很常见的。

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      扩展其他答案。在 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.
      

      【讨论】:

        【解决方案4】:

        查看PHP: Callbacks 页面。

        当为 callable 参数指定数组时,您正在指定该对象的 objectmethod。例如:

        $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类的方法

        【讨论】:

          猜你喜欢
          • 2016-04-03
          • 1970-01-01
          • 1970-01-01
          • 2016-12-08
          • 1970-01-01
          • 2019-11-19
          • 2010-10-19
          • 2016-12-31
          • 2011-10-11
          相关资源
          最近更新 更多