class foo {
function bar(callable $callable) {
$callable();
}
function printStr() {
echo "hi";
}
}
$foo = new foo();
$foo->bar(function () {
$this->printStr(); // Using $this when not in object context
});
是的,您需要传递一个匿名函数来调用 foo 类的方法。正如在 JS 中一样。如何才能实现这一目标?
这个怎么样:
class foo {
function bar(callable $callable) {
$callable($this);
}
function printStr() {
echo "hi";
}
}
$foo = new foo();
$foo->bar(function ($that) {
$that->printStr(); // Using $this when not in object context
});
这里
$this
作为可调用函数的参数提供。
根本不需要调整你的类,你可以简单地将类和方法名称作为数组传递来表示可调用的。该技术不提供将参数传递到回调中的能力。
代码:(演示)
$foo = new foo();
$foo->bar([$foo, 'printStr']);
或者您可以在匿名函数中使用箭头函数语法来调用类方法。当需要将参数传递到回调中时,这很有用。
代码:(演示)
$foo = new foo();
$foo->bar(fn() => $foo->printStr());
如果可调用对象不需要 100% 地访问类方法(或对象或常量),那么这两种方法都是合适的。如果您的
bar()
方法的可调用始终需要访问实例化对象,那么 @KIKOSoftware 修改类的建议是最合适的。