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 已经成熟
Dec 04 PHP
PHP迅雷、快车、旋风下载专用链转换代码
Jun 15 PHP
centos 5.6 升级php到5.3的方法
May 14 PHP
PHP和Mysqlweb应用开发核心技术-第1部分 Php基础-2 php语言介绍
Jul 03 PHP
php中的常用魔术方法总结
Aug 02 PHP
php+ajax实现图片文件上传功能实例
Jun 17 PHP
PHP return语句的另一个作用
Jul 30 PHP
php模拟服务器实现autoindex效果的方法
Mar 10 PHP
如何使用PHP对网站验证码进行破解
Sep 17 PHP
php常用数组array函数实例总结【赋值,拆分,合并,计算,添加,删除,查询,判断,排序】
Dec 07 PHP
PHP常量define和const的区别详解
May 18 PHP
php中try catch捕获异常实例详解
Aug 06 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/08/08 PHP
PHP header()函数常用方法总结
2014/04/11 PHP
PHP采用XML-RPC构造Web Service实例教程
2014/07/16 PHP
php 二维数组快速排序算法的实现代码
2017/10/17 PHP
js 页面传参数时 参数值含特殊字符的问题
2009/12/13 Javascript
HTML复选框和单选框 checkbox和radio事件介绍
2012/12/12 Javascript
SinaEditor使用方法详解
2013/12/28 Javascript
jQuery 插件开发指南
2014/11/14 Javascript
Bootstrap图片轮播组件使用实例解析
2016/06/30 Javascript
js中获取jsp表单中radio类型的值简单实例
2016/08/15 Javascript
bootstrap基本配置_动力节点Java学院整理
2017/07/14 Javascript
JS实现瀑布流布局
2017/10/21 Javascript
浅析Javascript中双等号(==)隐性转换机制
2017/10/27 Javascript
bootstrap table sum总数量统计实现方法
2017/10/29 Javascript
使用vue2实现带地区编号和名称的省市县三级联动效果
2018/11/05 Javascript
webpack 开发和生产并行设置的方法
2018/11/08 Javascript
写一个Vue Popup组件
2019/02/25 Javascript
为什么Vue3.0使用Proxy实现数据监听(defineProperty表示不背这个锅)
2019/10/14 Javascript
[15:20]DOTA2-DPC中国联赛 正赛 Elephant vs Aster 选手采访
2021/03/11 DOTA
python脚本设置系统时间的两种方法
2016/02/21 Python
Python中如何优雅的合并两个字典(dict)方法示例
2017/08/09 Python
python实现随机调用一个浏览器打开网页
2018/04/21 Python
python采集微信公众号文章
2018/12/20 Python
python 实现手机自动拨打电话的方法(通话压力测试)
2019/08/08 Python
jupyter notebook中新建cell的方法与快捷键操作
2020/04/22 Python
Space NK英国站:英国热门美妆网站
2017/12/11 全球购物
领先的英国注册在线药房 :Simply Meds Online
2019/03/28 全球购物
21岁生日感言
2014/02/27 职场文书
财务会计大学生自我评价
2014/04/09 职场文书
家长建议怎么写
2014/05/15 职场文书
赞美老师的演讲稿
2014/05/22 职场文书
资源环境与城乡规划管理专业自荐书
2014/09/26 职场文书
新学期家长寄语2016
2015/12/03 职场文书
2016教师暑期培训学习心得体会
2016/01/09 职场文书
python pyhs2 的安装操作
2021/04/07 Python
Nginx配置之实现多台服务器负载均衡
2021/08/02 Servers