$f = function($v) {
return $v + 1;
}
echo $f(4);
// output -> 5
以上工作完美无缺。但是,当f
是类的属性时,我无法正确地重现这一点。
class MyClass {
public $f;
public function __construct($f) {
$this->f = $f;
}
public function methodA($a) {
echo $this->f($a);
}
}
// When I try to call the property `f`, PHP gets confused
// and thinks I am trying to call a method of the class ...
$myObject = new myClass($f);
$myObject->methodA(4);
以上将导致错误:
Call to undefined method MyClass::f()
答案 0 :(得分:5)
我认为问题在于它试图理解
echo $this->f($a);
正如您发现它想要在课程中调用成员函数f
。如果将其更改为
echo ($this->f)($a);
它按照你的意愿解释它。
PHP 5.6 感谢ADyson的评论,认为这是有效的
$f = $this->f;
echo $f($a);
答案 1 :(得分:2)
虽然Nigel Ren的回答(https://stackoverflow.com/a/50117174/5947043)将在PHP 7中运行,但这种稍微扩展的语法也适用于PHP 5:
class MyClass {
public $f;
public function __construct($f) {
$this->f = $f;
}
public function methodA($a) {
$func = $this->f;
echo $func($a);
}
}
$f = function($v) {
return $v + 1;
};
$myObject = new myClass($f);
$myObject->methodA(4);
有关正常工作的演示,请参阅https://eval.in/997686。