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 google或baidu分页代码
Nov 26 PHP
深入phpMyAdmin的安装与配置的详细步骤
May 07 PHP
php实现上传图片生成缩略图示例
Apr 13 PHP
PHP base64编码后解码乱码的解决办法
Jun 19 PHP
PHP5.3与5.5废弃与过期函数整理汇总
Jul 10 PHP
经典PHP加密解密函数Authcode()修复版代码
Apr 05 PHP
php计算整个目录大小的方法
Jun 19 PHP
php实现搜索一维数组元素并删除二维数组对应元素的方法
Jul 06 PHP
PHP中Restful api 错误提示返回值实现思路
Apr 12 PHP
php版微信小店调用api示例代码
Nov 12 PHP
Linux服务器下PHPMailer发送邮件失败的问题解决
Mar 04 PHP
PHP/ThinkPHP实现批量打包下载文件的方法示例
Jul 31 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
人尽可用的Windows技巧小贴士之下篇
2007/03/22 PHP
php面向对象全攻略 (十六) 对象的串行化
2009/09/30 PHP
PHP Curl多线程原理实例详解
2013/11/06 PHP
php实现图片添加描边字和马赛克的方法
2014/12/10 PHP
php用户密码加密算法分析【Discuz加密算法】
2016/10/12 PHP
php实现 master-worker 守护多进程模式的实例代码
2019/07/20 PHP
用js实现判断当前网址的来路如果不是指定的来路就跳转到指定页面
2011/05/02 Javascript
php和js对数据库图片进行等比缩放示例
2014/04/28 Javascript
jquery中EasyUI实现异步树
2015/03/01 Javascript
jQuery实现仿Google首页拖动效果的方法
2015/05/04 Javascript
javascript实现图片轮播效果
2016/01/20 Javascript
JS中substring与substr的用法
2016/11/16 Javascript
微信端开发--登录小程序步骤
2017/01/11 Javascript
jquery仿京东商品放大浏览页面
2017/06/06 jQuery
JavaScript模块详解
2017/12/18 Javascript
H5+C3+JS实现五子棋游戏(AI篇)
2020/05/28 Javascript
17道题让你彻底理解JS中的类型转换
2019/08/08 Javascript
vue.js watch经常失效的场景与解决方案
2021/01/07 Vue.js
原生js实现下拉框选择组件
2021/01/20 Javascript
linux环境下安装pyramid和新建项目的步骤
2013/11/27 Python
Python实现矩阵转置的方法分析
2017/11/24 Python
一行代码让 Python 的运行速度提高100倍
2018/10/08 Python
python多个模块py文件的数据共享实例
2019/01/11 Python
Django错误:TypeError at / 'bool' object is not callable解决
2019/08/16 Python
Python 切分数组实例解析
2019/11/07 Python
Django 限制访问频率的思路详解
2019/12/24 Python
Windows 下python3.8环境安装教程图文详解
2020/03/11 Python
Python中return函数返回值实例用法
2020/11/19 Python
车间调度岗位职责
2013/11/30 职场文书
奥巴马演讲稿
2014/01/08 职场文书
企业项目策划书
2014/01/11 职场文书
班干部竞选演讲稿
2014/04/24 职场文书
2014院党委领导班子对照检查材料思想汇报
2014/09/24 职场文书
2014年预算员工作总结
2014/12/05 职场文书
Python基础详解之描述符
2021/04/28 Python
使用Redis实现点赞取消点赞的详细代码
2022/03/20 Redis