PHP Callable强制指定回调类型的方法


Posted in PHP onAugust 30, 2016

如果一个方法需要接受一个回调方法作为参数,我们可以这样写

<?php
function dosth($callback){
call_user_func($callback);
}
function callback(){
echo 'do sth callback';
}
dosth('callback');
?>

输出:

do sth callback

但我们不能确定回调方法是否可以调用,因此需要做很多额外的工作去检查这个回调方法是否可以调用。

有什么更好的方法可以判断回调方法是否可调用?
我们可以使用callable来强制指定参数为回调类型,这样可以保证回调方法必须是可以调用的。

例如,回调方法为一个不存在的方法

<?php
function dosth(callable $callback){
call_user_func($callback);
}
dosth('abc');
?>

执行后,提示错误:TypeError: Argument 1 passed to dosth() must be callable
程序并不能执行到dosth内部的处理,从参数类型处就已经做了检查处理,起到保护作用。

而如果把callable去掉

<?php
function dosth($callback){
call_user_func($callback);
}
dosth('abc');
?>

执行后,提示警告:Warning: call_user_func() expects parameter 1 to be a valid callback, function ‘abc' not found or invalid function name

程序能执行到dosth内部的处理,这样就需要做很多额外的工作去检查这个回调方法是否可以调用。

因此,如果方法的参数是回调方法,都应加上callable强制指定为回调类型,这样可以减少调用的错误和提高程序的质量。

以上所述是小编给大家介绍的PHP Callable强制指定回调类型的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

PHP 相关文章推荐
PHP 类商品秒杀计时实现代码
May 05 PHP
PHP XML数据解析代码
May 26 PHP
上传文件先创建目录 再上传到目录里面去
Dec 29 PHP
PHP substr 截取字符串出现乱码问题解决方法[utf8与gb2312]
Dec 16 PHP
PHP 使用MySQL管理Session的回调函数详解
Jun 21 PHP
php+mysqli实现批量替换数据库表前缀的方法
Dec 29 PHP
codeigniter中view通过循环显示数组数据的方法
Mar 20 PHP
PHP正则获取页面所有图片地址
Mar 23 PHP
php 修改上传文件大小限制实例详解
Oct 23 PHP
php array_pop 删除数组最后一个元素实例
Nov 02 PHP
PHP简单实现合并2个数字键数组值的方法
May 30 PHP
php 使用 __call实现重载功能示例
Nov 18 PHP
thinkphp配置文件路径的实现方法
Aug 30 #PHP
总结PHP删除字符串最后一个字符的三种方法
Aug 30 #PHP
功能强大的php文件上传类
Aug 29 #PHP
功能强大的PHP发邮件类
Aug 29 #PHP
微信网页授权(OAuth2.0) PHP 源码简单实现
Aug 29 #PHP
Laravel 5.3 学习笔记之 错误&amp;日志
Aug 28 #PHP
Laravel 5.3 学习笔记之 配置
Aug 28 #PHP
You might like
php不用内置函数对数组排序的两个算法代码
2010/02/08 PHP
php实现RSA加密类实例
2015/03/26 PHP
PHP实现的购物车类实例
2015/06/17 PHP
php获取文件后缀的9种方法
2016/03/22 PHP
php7基于递归实现删除空文件夹的方法示例
2017/06/15 PHP
PHP实现的折半查找算法示例
2017/12/19 PHP
基于jquery.Jcrop的头像编辑器
2010/03/01 Javascript
jquery浏览器滚动加载技术实现方案
2014/06/03 Javascript
JavaScript基于setTimeout实现计数的方法
2015/05/08 Javascript
Javascript数组Array基础介绍
2016/03/13 Javascript
基于vuejs+webpack的日期选择插件
2020/05/21 Javascript
JS实现的DIV块来回滚动效果示例
2017/02/07 Javascript
Bootstrap实现的表格合并单元格示例
2018/02/06 Javascript
NodeJS简单实现WebSocket功能示例
2018/02/10 NodeJs
原生JS实现循环Nodelist Dom列表的4种方式示例
2018/02/11 Javascript
Vue项目中使用WebUploader实现文件上传的方法
2019/07/21 Javascript
基于js实现判断浏览器类型代码实例
2020/07/17 Javascript
[47:04]LGD vs infamous Supermajor小组赛D组 BO3 第二场 6.3
2018/06/04 DOTA
python在多玩图片上下载妹子图的实现代码
2013/08/13 Python
Python中多线程及程序锁浅析
2015/01/21 Python
Python实现TCP协议下的端口映射功能的脚本程序示例
2016/06/14 Python
Python正则表达式完全指南
2017/05/25 Python
在dataframe两列日期相减并且得到具体的月数实例
2018/07/03 Python
Python使用psutil获取进程信息的例子
2019/12/17 Python
python实现大战外星人小游戏实例代码
2019/12/26 Python
python判断字符串以什么结尾的实例方法
2020/09/18 Python
css3中transition属性详解
2014/09/02 HTML / CSS
5分钟弄清楚html5的drag and drop(小结)
2019/04/10 HTML / CSS
Europcar比利时:租车
2019/08/26 全球购物
澳大利亚窗帘商店:Curtain Wonderland
2019/12/01 全球购物
学习经验交流会主持词
2014/04/01 职场文书
《草原的早晨》教学反思
2014/04/08 职场文书
政治学专业毕业生求职信
2014/08/11 职场文书
行政处罚决定书
2015/06/24 职场文书
WebRTC记录音视频流(web技术分享)
2022/02/24 Javascript
基于Redission的分布式锁实战
2022/08/14 Redis