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 相关文章推荐
dedecms中显示数字验证码的修改方法
Mar 21 PHP
php中存储用户ID和密码到mysql数据库的方法
Feb 06 PHP
腾讯QQ微博API接口获取微博内容
Oct 30 PHP
php旋转图片90度的方法
Nov 07 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(五)
Jun 23 PHP
Laravel框架中扩展函数、扩展自定义类的方法
Sep 04 PHP
php5.3提示Function ereg() is deprecated Error问题解决方法
Nov 12 PHP
getimagesize获取图片尺寸实例
Nov 15 PHP
PHP的Laravel框架中使用AdminLTE模板来编写网站后台界面
Mar 21 PHP
CodeIgniter集成smarty的方法详解
May 26 PHP
php+redis实现注册、删除、编辑、分页、登录、关注等功能示例
Feb 15 PHP
使用PHP反射机制来构造&quot;CREATE TABLE&quot;的sql语句
Mar 21 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
探讨PHP中this,self,parent的区别详解
2013/06/08 PHP
慎用preg_replace危险的/e修饰符(一句话后门常用)
2013/06/19 PHP
PHP获取windows登录用户名的方法
2014/06/24 PHP
使用PHP Socket 编程模拟Http post和get请求
2014/11/25 PHP
PHP 双链表(SplDoublyLinkedList)简介和使用实例
2015/05/12 PHP
PHP实现通过get方式识别用户发送邮件的方法
2015/07/16 PHP
关于laravel5.5的定时任务详解(demo)
2019/10/23 PHP
用js自动判断浏览器分辨率的代码
2007/01/28 Javascript
javaScript 读取和设置文档元素的样式属性
2009/04/14 Javascript
基于Jquery的仿Windows Aero弹出窗(漂亮的关闭按钮)
2010/09/28 Javascript
使用闭包对setTimeout进行简单封装避免出错
2013/07/10 Javascript
jquery实现select下拉框美化特效代码分享
2015/08/18 Javascript
分享有关jQuery中animate、slide、fade等动画的连续触发、滞后反复执行的bug
2016/01/10 Javascript
JavaScipt选取文档元素的方法(推荐)
2016/08/05 Javascript
jquery 判断是否支持Placeholder属性的方法
2017/02/07 Javascript
JS实现页面打印功能
2017/03/16 Javascript
Node.js中流(stream)的使用方法示例
2017/07/16 Javascript
node.js部署之启动后台运行forever的方法
2018/05/23 Javascript
JS实现全屏预览F11功能的示例代码
2018/07/23 Javascript
详解react阻止无效重渲染的多种方式
2018/12/11 Javascript
微信小程序中悬浮窗功能的实现代码
2019/08/02 Javascript
vue项目页面嵌入代码块vue-prism-editor的实现
2020/10/30 Javascript
[03:39]这就是刀塔,我们是冠军!燃情短片讲述我们的DOTA故事
2019/07/02 DOTA
Python的GUI框架PySide的安装配置教程
2016/02/16 Python
Keras搭建自编码器操作
2020/07/03 Python
python 线程的五个状态
2020/09/22 Python
纯CSS3制作的简洁蓝白风格的登录模板(非IE效果更好)
2013/08/11 HTML / CSS
利用CSS3 动画 绘画 圆形动态时钟
2018/03/20 HTML / CSS
HTML5中5个简单实用的API(第二篇,含全屏、可见性、拍照、预加载、电池状态)
2014/05/07 HTML / CSS
罗技美国官网:Logitech美国
2020/01/22 全球购物
linux面试题参考答案(8)
2015/08/11 面试题
物理教师自荐信范文
2013/12/28 职场文书
社区个人对照检查材料(群众路线)
2014/09/26 职场文书
幼儿园小班教学反思
2016/03/03 职场文书
2019餐饮行业创业计划书!
2019/06/27 职场文书
基于Python和openCV实现图像的全景拼接详细步骤
2021/10/05 Python