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 相关文章推荐
中国站长站 For Dede4.0 采集规则
May 27 PHP
在Ubuntu 14.04上部署 PHP 环境及 WordPress
Sep 02 PHP
CI框架Session.php源码分析
Nov 03 PHP
PHP实现通过正则表达式替换回调的内容标签
Jun 15 PHP
dvwa+xampp搭建显示乱码的问题及解决方案
Aug 23 PHP
4种PHP异步执行的常用方式
Dec 24 PHP
yii2.0数据库迁移教程【多个数据库同时同步数据】
Oct 08 PHP
PHP数组生成XML格式数据的封装类实例
Nov 10 PHP
php使用flock阻塞写入文件和非阻塞写入文件的实例讲解
Jul 10 PHP
thinkPHP3.2.3结合Laypage实现的分页功能示例
May 28 PHP
laravel清除视图缓存的代码
Oct 23 PHP
laravel与thinkphp之间的区别与优缺点
Mar 02 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 Cookie的一个使用注意点
2008/11/08 PHP
PHP 判断常量,变量和函数是否存在
2009/04/26 PHP
php inc文件使用的风险和注意事项
2013/11/12 PHP
php检测数组长度函数sizeof与count用法
2014/11/17 PHP
PHP安全上传图片的方法
2015/03/21 PHP
兼容FireFox 的 js 日历 支持时间的获取
2009/03/04 Javascript
JavaScript Cookie显示用户上次访问的时间和次数
2009/12/08 Javascript
Extjs学习笔记之八 继承和事件基础
2010/01/08 Javascript
Chosen 基于jquery的选择框插件使用方法
2012/05/30 Javascript
jQuery自带的一些常用方法总结
2014/09/03 Javascript
解析JavaScript的ES6版本中的解构赋值
2015/07/28 Javascript
浅析jquery如何判断滚动条滚到页面底部并执行事件
2016/04/29 Javascript
前端性能优化及技巧
2016/05/06 Javascript
微信小程序 图片等比例缩放(图片自适应屏幕)
2016/11/16 Javascript
jQuery Ajax全解析
2017/02/13 Javascript
layui前段框架日期控件使用方法详解
2017/05/19 Javascript
React Native中TabBarIOS的简单使用方法示例
2017/10/13 Javascript
jQuery实现的简单日历组件定义与用法示例
2018/12/24 jQuery
jquery简单实现纵向的无缝滚动代码实例
2019/04/01 jQuery
微信小程序实现文件、图片上传功能
2020/08/18 Javascript
Vue vm.$attrs使用场景详解
2020/03/08 Javascript
创建nuxt.js项目流程图解
2020/03/13 Javascript
Javascript confirm多种使用方法解析
2020/09/25 Javascript
python函数的5种参数详解
2017/02/24 Python
用python处理图片实现图像中的像素访问
2018/05/04 Python
Python基于递归和非递归算法求两个数最大公约数、最小公倍数示例
2018/05/21 Python
numpy使用fromstring创建矩阵的实例
2018/06/15 Python
Tensorflow中tf.ConfigProto()的用法详解
2020/02/06 Python
python线程里哪种模块比较适合
2020/08/02 Python
html5中的input新属性range使用记录
2014/09/05 HTML / CSS
英国著名的化妆品折扣网站:Allbeauty.com
2016/07/21 全球购物
实习生个人找工作的自我评价
2013/10/30 职场文书
《雪儿》教学反思
2014/04/17 职场文书
2016应届毕业生实习心得体会
2015/10/09 职场文书
涨工资申请书应该怎么写?
2019/07/08 职场文书
Valheim服务器 Mod修改安装教程 【ValheimPlus】
2022/12/24 Servers