我有一个类,其中的方法可以用作回调函数。
我如何将它们作为参数传递?
Class MyClass {
public function myMethod() {
// How should these be called?
$this->processSomething(this->myCallback);
$this->processSomething(self::myStaticCallback);
}
private function processSomething(callable $callback) {
// Process something...
$callback();
}
private function myCallback() {
// Do something...
}
private static function myStaticCallback() {
// Do something...
}
}
5条答案
按热度按时间qzwqbdag1#
查看
callable
manual,了解将函数作为回调传递的所有不同方法,我将该手册复制到这里,并根据您的场景添加了每种方法的一些示例。可调用
PHP函数通过其名称作为字符串传递。可以使用任何内置或用户定义的函数,但语言构造除外,例如: 数组()、 回显 、 空()、 求值()、 退出()、 设置()、 列表()、 打印 * 或 * 取消设置()*。
*静态类方法也可以通过传递类名而不是索引 0 处的对象来传递,而无需示例化该类的对象。
taor4pac2#
从PHP 8.1开始,我们有了first-class callables。它们使用语法
$callable = functionName(...)
。三个点是语法的一部分,而不是省略。可以使用新语法创建可调用的类方法。
这三个点不是参数的省略/占位符。它们是创建可调用对象的特殊语法。如果方法不接受参数,语法保持不变。
rsl1atfo3#
因为5.3有一种更优雅的方式可以编写它,我仍然在尝试找出是否可以减少更多
sqxo8psd4#
您还可以使用call_user_func()来指定回调:
eulz3vhy5#
可以将方法的返回类型设置为
callable
。它适用于PHP 7.1那就这么叫吧: