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 相关文章推荐
PHP4实际应用经验篇(5)
Oct 09 PHP
PHP+DBM的同学录程序(2)
Oct 09 PHP
windows xp下安装pear
Dec 02 PHP
mysql 字段类型说明
Apr 27 PHP
php 结果集的分页实现代码
Mar 10 PHP
PHP编码转换函数 自动转换字符集支持数组转换
Dec 16 PHP
如何用php获取文件名后缀
Jun 09 PHP
php中jpgraph类库的使用介绍
Aug 08 PHP
php实现图片等比例缩放代码
Jul 23 PHP
yii2分页之实现跳转到具体某页的实例代码
Jun 02 PHP
php5.3后静态绑定用法详解
Nov 11 PHP
ThinkPHP3.2.3框架实现的空模块、空控制器、空操作,跳转到错误404页面图文详解
Apr 03 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
通过ICQ网关发送手机短信的PHP源程序
2006/10/09 PHP
PHP的异常处理类Exception的使用及说明
2012/06/13 PHP
深入浅析yii2-gii自定义模板的方法
2016/04/26 PHP
Javascript &amp; DHTML 实例编程(教程)DOM基础和基本API
2007/06/02 Javascript
Web 前端设计模式--Dom重构 提高显示性能
2010/10/22 Javascript
JS调用CS里的带参方法实例
2013/08/01 Javascript
Jquery插件easyUi表单验证提交(示例代码)
2013/12/30 Javascript
javascript判断chrome浏览器的方法
2014/03/26 Javascript
使用jQuery判断IE浏览器版本的代码
2014/06/14 Javascript
jQuery事件绑定和委托实例
2014/11/25 Javascript
javascript框架设计读书笔记之种子模块
2014/12/02 Javascript
浅析Node.js中使用依赖注入的相关问题及解决方法
2015/06/24 Javascript
学习JavaScript设计模式之单例模式
2016/01/19 Javascript
ES6新特征数字、数组、字符串
2016/10/01 Javascript
vue使用keep-alive实现数据缓存不刷新
2017/10/21 Javascript
jQuery基于Ajax实现读取XML数据功能示例
2018/05/31 jQuery
在AngularJs中设置请求头信息(headers)的方法及不同方法的比较
2018/09/04 Javascript
详解vue使用$http服务端收不到参数
2019/04/19 Javascript
详解微信小程序缓存--缓存时效性
2019/05/02 Javascript
微信小程序云函数添加数据到数据库的方法
2020/03/04 Javascript
小程序表单认证布局及验证详解
2020/06/19 Javascript
详细解析Python中的变量的数据类型
2015/05/13 Python
Python字符串处理实现单词反转
2017/06/14 Python
Python使用paramiko操作linux的方法讲解
2019/02/25 Python
Tensorflow实现部分参数梯度更新操作
2020/01/23 Python
在终端启动Python时报错的解决方案
2020/11/20 Python
Python3.9最新版下载与安装图文教程详解(Windows系统为例)
2020/11/28 Python
HTML5之tabindex属性全面解析
2016/07/07 HTML / CSS
HTML5实现移动端复制功能
2018/04/19 HTML / CSS
英国家庭珠宝商:T. H. Baker
2018/02/08 全球购物
网络工程师面试(三木通信技术有限公司)
2013/06/05 面试题
社团活动策划书范文
2014/01/09 职场文书
企业安全生产责任书范本
2014/07/28 职场文书
结婚幸福感言
2015/08/01 职场文书
小学英语新课改心得体会
2016/01/22 职场文书
企业内部管理控制:采购授权审批制度范本
2020/01/19 职场文书