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静态新闻列表自动生成代码
Jun 14 PHP
php 缓存函数代码
Aug 27 PHP
如何用php获取程序执行的时间
Jun 09 PHP
采用ThinkPHP中F方法实现快速缓存实例
Jun 13 PHP
ThinkPHP多语言支持与多模板支持概述
Aug 22 PHP
PHP合并静态文件详解
Nov 14 PHP
php编写的一个E-mail验证类
Mar 25 PHP
分享php分页的功能模块
Jun 16 PHP
PHP内核探索之解释器的执行过程
Dec 22 PHP
php实现计算百度地图坐标之间距离的方法
May 05 PHP
php在windows环境下获得cpu内存实时使用率(推荐)
Feb 08 PHP
PHP判断是否是微信打开,浏览器打开的方法
Mar 14 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 生成唯一id的几种解决方法
2013/03/08 PHP
PHP实现单例模式最安全的做法
2014/06/13 PHP
yii2实现 &quot;上一篇,下一篇&quot; 功能的代码实例
2017/02/04 PHP
Javascript valueOf 使用方法
2008/12/28 Javascript
JavaScript入门教程(8) Location地址对象
2009/01/31 Javascript
JavaScript获取GridView选择的行内容
2009/04/14 Javascript
ExtJS 2.0实用简明教程 之Ext类库简介
2009/04/29 Javascript
javascript中input中readonly和disabled区别介绍
2012/10/23 Javascript
jQuery实现向下滑出的平滑下拉菜单效果
2015/08/21 Javascript
jQuery-1.9.1源码分析系列(十)事件系统之事件体系结构
2015/11/19 Javascript
学习JavaScript设计模式(链式调用)
2015/11/26 Javascript
详解js中构造流程图的核心技术JsPlumb(2)
2015/12/08 Javascript
浅谈javascript中的加减时间
2016/07/12 Javascript
BootStrap框架中的data-[ ]自定义属性理解(推荐)
2017/02/14 Javascript
微信小程序 解析网页内容详解及实例
2017/02/22 Javascript
JavaScript中的普通函数和箭头函数的区别和用法详解
2017/03/21 Javascript
解析vue路由异步组件和懒加载案例
2018/06/08 Javascript
JS隐藏号码中间4位代码实例
2019/04/09 Javascript
node.js制作一个简单的登录拦截器
2020/02/10 Javascript
[03:09]2014DOTA2国际邀请赛 Mushi前队友送上祝福
2014/07/12 DOTA
Python语言实现获取主机名根据端口杀死进程
2016/03/31 Python
python魔法方法-自定义序列详解
2016/07/21 Python
Ubuntu安装Jupyter Notebook教程
2017/10/18 Python
浅谈Django的缓存机制
2018/08/23 Python
解决pycharm 远程调试 上传 helpers 卡住的问题
2019/06/27 Python
python中pip的使用和修改下载源的方法
2019/07/08 Python
Python文件操作函数用法实例详解
2019/12/24 Python
基于python实现计算且附带进度条代码实例
2020/03/31 Python
Python用dilb提取照片上人脸的示例
2020/10/26 Python
pandas统计重复值次数的方法实现
2021/02/20 Python
Java程序员综合测试题
2014/04/25 面试题
标准自荐信范文
2014/01/29 职场文书
先进班级集体事迹材料
2014/01/30 职场文书
法律专业学生的自我评价
2014/02/07 职场文书
新春寄语大全
2014/04/09 职场文书
学校领导班子成员查摆问题及整改措施
2014/10/28 职场文书