How to use class methods as callbacks(如何使用类方法作为回调)
本文介绍了如何使用类方法作为回调的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个包含要用作回调的方法的类。
如何将它们作为参数传递?
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...
}
}
推荐答案
查看callable
manual以查看将函数作为回调传递的所有不同方式。我在这里复制了该手册,并根据您的方案添加了每种方法的一些示例。
可调用
- PHP函数按其名称作为字符串传递。可以使用任何内置或用户定义的函数,但语言构造除外:数组()、回显、空()、val()、退出()、isset()、列表()、打印或unset()。
// Not applicable in your scenario
$this->processSomething('some_global_php_function');
- 实例化对象的方法作为包含索引0处的对象和索引1处的方法名称的数组传递。
// Only from inside the same class
$this->processSomething([$this, 'myCallback']);
$this->processSomething([$this, 'myStaticCallback']);
// From either inside or outside the same class
$myObject->processSomething([new MyClass(), 'myCallback']);
$myObject->processSomething([new MyClass(), 'myStaticCallback']);
- 静态类方法也可以通过传递类名称而不是索引0处的对象来传递,而无需实例化该类的对象。
// Only from inside the same class
$this->processSomething([__CLASS__, 'myStaticCallback']);
// From either inside or outside the same class
$myObject->processSomething(['NamespaceMyClass', 'myStaticCallback']);
$myObject->processSomething(['NamespaceMyClass::myStaticCallback']); // PHP 5.2.3+
$myObject->processSomething([MyClass::class, 'myStaticCallback']); // PHP 5.5.0+
- 除了普通的自定义函数外,匿名函数也可以传递给回调参数。
// Not applicable in your scenario unless you modify the structure
$this->processSomething(function() {
// process something directly here...
});
这篇关于如何使用类方法作为回调的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:如何使用类方法作为回调
基础教程推荐
猜你喜欢
- WooCommerce 中选定产品类别的自定义产品价格后缀 2021-01-01
- 在多维数组中查找最大值 2021-01-01
- 在 PHP 中强制下载文件 - 在 Joomla 框架内 2022-01-01
- Libpuzzle 索引数百万张图片? 2022-01-01
- 在 Woocommerce 中根据运输方式和付款方式添加费用 2021-01-01
- 通过 PHP SoapClient 请求发送原始 XML 2021-01-01
- mysqli_insert_id 是否有可能在高流量应用程序中返回 2021-01-01
- 超薄框架REST服务两次获得输出 2022-01-01
- 如何在 PHP 中的请求之间持久化对象 2022-01-01
- XAMPP 服务器不加载 CSS 文件 2022-01-01