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中使用与Perl兼容的正则表达式
Nov 26 PHP
php项目打包方法
Feb 18 PHP
apache mysql php 源码编译使用方法
May 03 PHP
基于Zookeeper的使用详解
May 02 PHP
学习php过程中的一些注意点的总结
Oct 25 PHP
兼容ie6浏览器的php下载文件代码分享
Jul 14 PHP
php文件缓存类用法实例分析
Apr 22 PHP
PHP文件缓存类实现代码
Oct 26 PHP
PHP微信支付实例解析
Jul 22 PHP
PHP魔术方法以及关于独立实例与相连实例的全面讲解
Oct 18 PHP
PHP实现截取中文字符串不出现?号的解决方法
Dec 29 PHP
thinkphp3.2嵌入百度编辑器ueditor的实例代码
Jul 13 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
百度ping方法使用示例 自动ping百度
2014/01/26 PHP
php短网址和数字之间相互转换的方法
2015/03/13 PHP
PHP 将数组打乱 shuffle函数的用法及简单实例
2016/06/17 PHP
PHP各种常见经典算法总结【排序、查找、翻转等】
2019/08/05 PHP
IE和FireFox(FF)中js和css的不同
2009/04/13 Javascript
javascript简易缓动插件(源码打包)
2012/02/16 Javascript
JavaScript获取鼠标移动时的坐标(兼容IE8、chome谷歌、Firefox)
2014/09/13 Javascript
jQuery事件绑定和委托实例
2014/11/25 Javascript
js+css实现tab菜单切换效果的方法
2015/01/20 Javascript
JavaScript实现点击按钮字体放大、缩小
2016/02/29 Javascript
Angular指令封装jQuery日期时间插件datetimepicker实现双向绑定示例
2017/01/22 Javascript
关于jquery中attr()和prop()方法的区别
2018/05/28 jQuery
vue.js轮播图组件使用方法详解
2018/07/03 Javascript
vue 解决无法对未定义的值,空值或基元值设置反应属性报错问题
2020/07/31 Javascript
Vue仿百度搜索功能
2020/12/28 Vue.js
在Python中操作时间之strptime()方法的使用
2020/12/30 Python
对numpy中shape的深入理解
2018/06/15 Python
利用python画出折线图
2018/07/26 Python
Django模板语言 Tags使用详解
2019/09/09 Python
Python 使用 prettytable 库打印表格美化输出功能
2019/12/26 Python
pytorch之ImageFolder使用详解
2020/01/06 Python
Python restful框架接口开发实现
2020/04/13 Python
python利用google翻译方法实例(翻译字幕文件)
2020/09/21 Python
18-35岁旅游团的全球领导者:Contiki
2017/02/08 全球购物
如何写出高性能的JSP和Servlet
2013/01/22 面试题
铭万公司.net面试题笔试题
2014/07/20 面试题
Unix控制后台进程都有哪些进程
2016/09/22 面试题
图书室管理制度
2014/01/19 职场文书
个人作风剖析材料
2014/02/02 职场文书
学习型党组织心得体会
2014/09/12 职场文书
法人单位授权委托书范文
2014/10/06 职场文书
出纳试用期自我评价
2015/03/10 职场文书
电信营业员岗位职责
2015/04/14 职场文书
工伤事故赔偿协议书
2015/08/06 职场文书
win10键盘驱动怎么修复?Win10键盘驱动修复小技巧
2022/04/06 数码科技
Redis超详细讲解高可用主从复制基础与哨兵模式方案
2022/04/07 Redis