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(视频)Http下载
Dec 12 PHP
php数组函数序列之sort() 对数组的元素值进行升序排序
Nov 02 PHP
PHP判断文章里是否有图片的简单方法
Jul 26 PHP
php发送与接收流文件的方法
Feb 11 PHP
ThinkPHP静态缓存简单配置和使用方法详解
Mar 23 PHP
PHP MySql增删改查的简单实例
Jun 21 PHP
微信支付开发告警通知实例
Jul 12 PHP
Laravel如何友好的修改.env配置文件详解
Jun 07 PHP
PHP实现基于图的深度优先遍历输出1,2,3...n的全排列功能
Nov 10 PHP
PHP JWT初识及其简单示例
Oct 10 PHP
Laravel6.2中用于用户登录的新密码确认流程详解
Oct 16 PHP
PHP number_format函数原理及实例解析
Jul 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
检测png图片是否完整的php代码
2010/09/06 PHP
yii框架中的Url生产问题小结
2012/01/16 PHP
基于在生产环境中使用php性能测试工具xhprof的详解
2013/06/03 PHP
php 验证码(倾斜,正弦干扰线,黏贴,旋转)
2013/06/29 PHP
Yii2中关联查询简单用法示例
2016/08/10 PHP
php简单截取字符串代码示例
2016/10/19 PHP
Swoole4.4协程抢占式调度器详解
2019/05/23 PHP
extjs form textfield的隐藏方法
2008/12/29 Javascript
javascript 学习笔记(一)DOM基本操作
2011/04/08 Javascript
formStorage 基于jquery的一个插件(存储表单中元素的状态到本地)
2012/01/20 Javascript
JS图片无缝滚动(简单利于使用)
2013/06/17 Javascript
js替换字符串的所有示例代码
2013/07/23 Javascript
JS中产生20位随机数以0-9为例也可以是a-z A-Z
2014/08/01 Javascript
jQuery基于cookie实现的购物车实例分析
2015/12/24 Javascript
浅析AngularJs HTTP响应拦截器
2015/12/28 Javascript
jQuery实现图片走马灯效果的原理分析
2016/01/16 Javascript
浅谈jQuery中的checkbox问题
2016/08/10 Javascript
微信小程序  简单实例(阅读器)的实例开发
2016/09/29 Javascript
vue 纯js监听滚动条到底部的实例讲解
2018/09/03 Javascript
详解从0开始搭建微信小程序(前后端)的全过程
2019/04/15 Javascript
浅谈layui使用模板引擎动态渲染元素要注意的问题
2019/09/14 Javascript
开发Node CLI构建微信小程序脚手架的示例
2020/03/27 Javascript
python使用socket向客户端发送数据的方法
2015/04/29 Python
CentOS中升级Python版本的方法详解
2017/07/10 Python
pytorch 可视化feature map的示例代码
2019/08/20 Python
Python Tkinter模块 GUI 可视化实例
2019/11/20 Python
手摸手教你用canvas实现给图片添加平铺水印的实现
2019/08/20 HTML / CSS
聪明的粉丝购买门票的地方:TickPick
2018/03/09 全球购物
单位领导证婚词
2014/01/14 职场文书
人事主管岗位职责
2014/01/30 职场文书
中学生操行评语
2014/04/24 职场文书
机械专业求职信
2014/05/25 职场文书
大学生求职信
2014/06/17 职场文书
生物工程专业求职信
2014/09/03 职场文书
Windows11性能真的上涨35%? 桌面酷睿i9实测结果公开
2021/11/21 数码科技
Tomcat项目启动失败的原因和解决办法
2022/04/20 Servers