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 相关文章推荐
Get或Post提交值的非法数据处理
Oct 09 PHP
fleaphp crud操作之findByField函数的使用方法
Apr 23 PHP
本地计算机无法启动Apache故障处理
Aug 08 PHP
PHP开发注意事项总结
Feb 04 PHP
php运行时动态创建函数的方法
Mar 16 PHP
如何利用http协议发布博客园博文评论
Aug 03 PHP
PHP mysql事务问题实例分析
Jan 18 PHP
zend framework中使用memcache的方法
Mar 04 PHP
[原创]php求圆周率的简单实现方法
May 30 PHP
PHP用mysql_insert_id()函数获得刚插入数据或当前发布文章的ID
Nov 25 PHP
django中的ajax组件教程详解
Oct 18 PHP
PHP如何开启Opcache功能提升程序处理效率
Apr 27 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
第三节--定义一个类
2006/11/16 PHP
使用PHP实现二分查找算法代码分享
2011/06/24 PHP
thinkPHP模板中函数的使用方法示例
2016/11/30 PHP
JavaScript网页制作特殊效果用随机数
2007/05/22 Javascript
js异步加载的三种解决方案
2013/03/04 Javascript
js使用栈来实现10进制转8进制与取除数及余数
2014/06/11 Javascript
DEDECMS如何为文章添加HOT NEW标志图片
2015/08/14 Javascript
json传值以及ajax接收详解
2016/05/24 Javascript
Javascript动画效果(3)
2016/10/11 Javascript
js对字符串进行编码的方法总结(推荐)
2016/11/10 Javascript
基于jQuery封装的分页组件
2017/06/26 jQuery
Vue.js轮播图走马灯代码实例(全)
2019/05/08 Javascript
JavaScript事件冒泡机制原理实例解析
2020/01/14 Javascript
如何基于layui的laytpl实现数据绑定的示例代码
2020/04/10 Javascript
vue组件中传值EventBus的使用及注意事项说明
2020/11/16 Javascript
python实现rest请求api示例
2014/04/22 Python
Python中输出ASCII大文字、艺术字、字符字小技巧
2015/04/28 Python
python语言中with as的用法使用详解
2018/02/23 Python
在python2.7中用numpy.reshape 对图像进行切割的方法
2018/12/05 Python
Python设计模式之外观模式实例详解
2019/01/17 Python
Python FFT合成波形的实例
2019/12/04 Python
Python‘==‘ 及 ‘is‘相关原理解析
2020/09/05 Python
解决PDF 转图片时丢文字的一种可能方式
2021/03/04 Python
阿迪达斯德国官方网站:adidas德国
2017/07/12 全球购物
瑞典在互联网上最大的宠物商店:Animail
2020/10/31 全球购物
装修五一活动策划案
2014/01/23 职场文书
代收款委托书范本
2014/10/01 职场文书
2014年小学少先队工作总结
2014/12/18 职场文书
交警失职检讨书
2015/01/26 职场文书
长城导游词400字
2015/01/30 职场文书
社区文明倡议书
2015/04/28 职场文书
2015年幼儿园班主任工作总结
2015/05/12 职场文书
2019学校请假条格式及范文
2019/06/25 职场文书
简单实现一个手持弹幕功能+文字抖动特效
2021/03/31 HTML / CSS
浅谈redis整数集为什么不能降级
2021/07/25 Redis
Golang 并发下的问题定位及解决方案
2022/03/16 Golang