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 相关文章推荐
第十一节 重载 [11]
Oct 09 PHP
一个php作的文本留言本的例子(二)
Oct 09 PHP
删除数组元素实用的PHP数组函数
Aug 18 PHP
PHP Squid中可缓存的动态网页设计
Sep 17 PHP
用PHP的ob_start() 控制您的浏览器cache
Aug 03 PHP
使用CodeIgniter的类库做图片上传
Jun 12 PHP
PHP实现的简单mock json脚本分享
Feb 10 PHP
php实现比较两个字符串日期大小的方法
May 12 PHP
Yii2验证器(Validator)用法分析
Jul 23 PHP
详解Yii实现分页的两种方法
Jan 14 PHP
mac系统下安装多个php并自由切换的方法详解
Apr 21 PHP
ThinkPHP6.0如何利用自定义验证规则规范的实现登陆
Dec 16 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
修改Zend引擎实现PHP源码加密的原理及实践
2008/04/14 PHP
php版微信自动获取收货地址api用法示例
2016/09/22 PHP
使用PHP连接多种数据库的实现代码(mysql,access,sqlserver,Oracle)
2016/12/21 PHP
Extjs学习笔记之四 工具栏和菜单
2010/01/07 Javascript
关于JavaScript中的关联数组分析
2013/04/09 Javascript
jquery动态增加删除表格行的小例子
2013/11/14 Javascript
JS中使用Array函数shift和pop创建可忽略参数的例子
2014/05/28 Javascript
JS中的form.submit()不能提交表单的错误原因
2014/10/08 Javascript
JavaScript从数组中删除指定值元素的方法
2015/03/18 Javascript
BootStrap glyphicons 字体图标实现方法
2016/05/01 Javascript
Bootstrap下拉菜单效果实例代码分享
2016/06/30 Javascript
js方法数据验证的简单实例
2016/09/17 Javascript
Node.JS使用Sequelize操作MySQL的示例代码
2017/10/09 Javascript
JavaScript变量声明var,let.const及区别浅析
2018/04/23 Javascript
解决select2在bootstrap modal中不能正常使用的问题
2018/08/09 Javascript
vue实现简单的日历效果
2020/09/24 Javascript
JavaScript冒泡算法原理与实现方法深入理解
2020/06/04 Javascript
详解element-ui 表单校验 Rules 配置 常用黑科技
2020/07/11 Javascript
Vue-router中hash模式与history模式的区别详解
2020/12/15 Vue.js
在Python的Django框架中生成CSV文件的方法
2015/07/22 Python
Python实现的快速排序算法详解
2017/08/01 Python
python 用lambda函数替换for循环的方法
2018/06/09 Python
序列化Python对象的方法
2020/08/01 Python
HTML5+CSS3 诱人的实例:3D立方体旋转动画实例
2016/12/30 HTML / CSS
材料加工硕士生求职信
2013/10/10 职场文书
精细化工应届生求职信
2013/11/17 职场文书
大学生职业生涯规划范文
2014/01/08 职场文书
审计主管岗位职责
2014/01/31 职场文书
还款承诺书范文
2014/05/20 职场文书
班子四风对照检查材料思想汇报
2014/09/29 职场文书
群众对十八届四中全会的期盼
2014/10/17 职场文书
婚前协议书标准版
2014/10/19 职场文书
元旦主持词开场白
2015/05/29 职场文书
大学生入党自我鉴定范文
2019/06/21 职场文书
python使用pymysql模块操作MySQL
2021/06/16 Python
vue-cli3.x配置全局的scss的时候报错问题及解决
2022/04/30 Vue.js