是否可以使用类方法作为array_map的可调用参数?

时间:2018-03-09 21:45:19

标签: php anonymous-function

我正在使用php 5.6,我想做这样的事情:

class FooBar {
  public function foo() {
    echo "foo!";
    array_map($this->bar, [1,2,3]);
  }

  private function bar() {
    echo "bar!";
  }
}
(new FooBar)->foo();

这会出现以下错误:

  

注意:未定义的属性:FooBar :: $ bar

或者,是否可以将匿名函数声明为类属性?像这样:

class FooBar {
  private $bar = function() {
    echo "bar!";
  }

  public function foo() {
    echo "foo!";
    array_map($this->bar, [1,2,3]);
  }
}
(new FooBar)->foo();

这给了我以下错误:

  

解析错误:语法错误,意外'功能' (T_FUNCTION)

我能够得到我之后的结果:

class FooBar {
  function __construct() {
      $this->bar = function() {
        echo "bar!";
      };
  }

  private $bar;

  public function foo() {
    echo "foo!";
    array_map($this->bar, [1,2,3]);
  }
}
(new FooBar)->foo();

然而,这并不理想;我不认为这些函数定义属于构造函数 - 理想情况下我希望它们是静态类方法。

1 个答案:

答案 0 :(得分:2)

您应该为您的函数指定上下文:

class FooBar {
  public function foo() {
    echo "foo!";
    array_map([$this, 'bar'], [1,2,3]);
  }

  private function bar() {
    echo "bar!";
  }
}
(new FooBar)->foo();

有关详细信息,请查看http://php.net/manual/en/language.types.callable.php