我正在使用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();
然而,这并不理想;我不认为这些函数定义属于构造函数 - 理想情况下我希望它们是静态类方法。
答案 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