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 相关文章推荐
几种显示数据的方法的比较
Oct 09 PHP
IIS+PHP+MySQL+Zend配置 (视频教程)
Dec 13 PHP
探讨:web上存漏洞及原理分析、防范方法
Jun 29 PHP
CodeIgniter采用config控制的多语言实现根据浏览器语言自动转换功能
Jul 18 PHP
php判断输入是否是纯数字,英文,汉字的方法
Mar 05 PHP
网页的分页下标生成代码(PHP后端方法)
Feb 03 PHP
PHP5.3新特性小结
Feb 14 PHP
php 中奖概率算法实现代码
Jan 25 PHP
php四种定界符详解
Feb 16 PHP
thinkPHP实现的省市区三级联动功能示例
May 05 PHP
PHP实现的最大正向匹配算法示例
Dec 19 PHP
php 使用html5 XHR2实现上传文件与进度显示功能示例
Mar 03 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的中问验证码
2006/11/25 PHP
php中的MVC模式运用技巧
2007/05/03 PHP
php实现读取内存顺序号
2015/03/29 PHP
php给数组赋值的实例方法
2019/09/26 PHP
基于jQuery的图片剪切插件
2011/08/03 Javascript
JQuery的read函数与js的onload不同方式实现
2013/03/18 Javascript
jQuery学习笔记(3)--用jquery(插件)实现多选项卡功能
2013/04/08 Javascript
js的alert样式如何更改如背景颜色
2014/01/22 Javascript
JavaScript保留两位小数的2个自定义函数
2014/05/05 Javascript
node.js实现BigPipe详解
2014/12/05 Javascript
jquery实现表单验证并阻止非法提交
2015/07/09 Javascript
jQuery实现仿腾讯迷你首页选项卡效果代码
2015/09/17 Javascript
javascript定义类和类的实现实例详解
2015/12/01 Javascript
Bootstrap每天必学之折叠(Collapse)插件
2016/04/25 Javascript
javascript滚轮事件基础实例讲解(37)
2017/02/14 Javascript
JavaScript反弹动画效果的实现代码
2017/07/13 Javascript
浅谈Node.js 子进程与应用场景
2018/01/24 Javascript
jQuery中的$是什么意思及 $. 和 $().的区别
2018/04/20 jQuery
Vue.js中关于侦听器(watch)的高级用法示例
2018/05/02 Javascript
Django+Vue跨域环境配置详解
2018/07/06 Javascript
[01:12:35]Spirit vs Navi Supermajor小组赛 A组败者组第一轮 BO3 第二场 6.2
2018/06/03 DOTA
python 迭代器和iter()函数详解及实例
2017/03/21 Python
python使用邻接矩阵构造图代码示例
2017/11/10 Python
儿童学习python的一些小技巧
2018/05/27 Python
tensorflow 实现从checkpoint中获取graph信息
2020/02/10 Python
css3 transform过渡抖动问题解决
2020/10/23 HTML / CSS
广州品高软件.net笔面试题目
2012/04/18 面试题
一份报关员的职业规划范文
2014/01/08 职场文书
周年庆典邀请函范文
2014/01/23 职场文书
制作部班长职位说明书
2014/02/26 职场文书
2015年推广普通话演讲稿
2015/03/20 职场文书
小学教师岗位职责
2015/04/02 职场文书
2015年新农村建设工作总结
2015/05/22 职场文书
申请吧主发表的感言
2015/08/03 职场文书
MySQL之DML语言
2021/04/05 MySQL
RPM包方式安装Oracle21c的方法详解
2021/08/23 Oracle