解析php函数method_exists()与is_callable()的区别


Posted in PHP onJune 21, 2013

php函数method_exists() 与is_callable()的区别在哪?在php面相对象设计过程中,往往我们需要在调用某一个方法是否属于某一个类的时候做出判断,常用的方法有 method_exists()和is_callable(),相比之下,is_callable()函数要高级一些,它接受字符串变量形式的方法名作为 第一个参数,如果类方法存在并且可以调用,则返回true。如果要检测类中的方法是否能被调用,可以给函数传递一个数组而不是类的方法名作为参数。数组必须包含对象或类名,以将其作为它的第一个元素,要检查的方法名则作为第二个元素。如果该方法在类中存在,函数返回true。
代码示例:

if ( is_callable( array( $obj, $method ) ) ) 
{ 
/*要操作的代码段*/
}

is_callable()可以加收另外一个参数:一个布尔值,如果将该参数设置为true,函数仅仅检查给定的方法或函数名称的语法是否正确,而不检查其是否真正存在。method_exists()函数的参数为一个对象(或类名)和一个方法名,如果给定方法在对象的类中存在,则返回true
代码示例:
if ( method_exists( $obj, $method ) ) 
{ 
/*要操作的代码段*/
}

php函数method_exists()与is_callable()的区别在于在php5中,一个方法存在并不意味着它就可以被调用。对于 private,protected和public类型的方法,method_exits()会返回true,但是is_callable()会检查存在其是否可以访问,如果是private,protected类型的,它会返回false。
PHP 相关文章推荐
基于PHP读取csv文件内容的详解
Jun 18 PHP
分享PHP header函数使用教程
Sep 05 PHP
PHP获取中英混合字符串长度的方法
Jun 07 PHP
php安装swoole扩展的方法
Mar 19 PHP
php基础教程
Aug 26 PHP
PHP数据对象PDO操作技巧小结
Sep 27 PHP
Yii实现文章列表置顶功能示例
Oct 18 PHP
php实现文件上传及头像预览功能
Jan 15 PHP
laravel学习笔记之模型事件的几种用法示例
Aug 15 PHP
PHP文件管理之实现网盘及压缩包的功能操作
Sep 20 PHP
PHP基于rabbitmq操作类的生产者和消费者功能示例
Jun 16 PHP
Ubuntu中支持PHP5与PHP7双版本的简单实现
Aug 19 PHP
深入理解PHP中的Session和Cookie
Jun 21 #PHP
PHP 使用MySQL管理Session的回调函数详解
Jun 21 #PHP
解析PHP中一些可能会被忽略的问题
Jun 21 #PHP
关于PHP堆栈与列队的学习
Jun 21 #PHP
浅析PHP 按位与或 (^ 、&)
Jun 21 #PHP
浅析PHP中Collection 类的设计
Jun 21 #PHP
解析PHP无限级分类方法及代码
Jun 21 #PHP
You might like
PHP令牌 Token改进版
2008/07/18 PHP
上传文件先创建目录 再上传到目录里面去
2010/12/29 PHP
解析Extjs与php数据交互(增删查改)
2013/06/25 PHP
php脚本运行时的超时机制详解
2016/02/17 PHP
PHPStorm+XDebug进行调试图文教程
2016/06/13 PHP
jquery获取div宽度的实现思路与代码
2013/01/13 Javascript
js获取location.href的参数实例代码
2013/08/02 Javascript
JQuery实现样式设置、追加、移除与切换的方法
2015/06/11 Javascript
关于JSON与JSONP简单总结
2016/08/16 Javascript
Node.js批量给图片加水印的方法
2016/11/15 Javascript
angular forEach方法遍历源码解读
2017/01/25 Javascript
JS实现直接运行html代码的方法
2017/03/13 Javascript
JavaScript实现换肤功能
2017/09/15 Javascript
JavaScript程序设计高级算法之动态规划实例分析
2017/11/24 Javascript
highCharts提示框中显示当前时间的方法
2019/01/18 Javascript
详解iframe跨域的几种常用方法(小结)
2019/04/29 Javascript
使用jquery-easyui的布局layout写后台管理页面的代码详解
2019/06/19 jQuery
通过layer实现可输入的模态框的例子
2019/09/27 Javascript
Vue 实现从文件中获取文本信息的方法详解
2019/10/16 Javascript
微信小程序云函数添加数据到数据库的方法
2020/03/04 Javascript
[01:08:44]NB vs VP 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python实现获取某天是某个月中的第几周
2015/02/11 Python
Python实用日期时间处理方法汇总
2015/05/09 Python
Python判断文件和文件夹是否存在的方法
2015/05/21 Python
Python 专题六 局部变量、全局变量global、导入模块变量
2017/03/20 Python
Python实现在tkinter中使用matplotlib绘制图形的方法示例
2018/01/18 Python
python3实现二叉树的遍历与递归算法解析(小结)
2019/07/03 Python
python脚本实现音频m4a格式转成MP3格式的实例代码
2019/10/09 Python
如何使用Python发送HTML格式的邮件
2020/02/11 Python
python入门:argparse浅析 nargs='+'作用
2020/07/12 Python
Python matplotlib图例放在外侧保存时显示不完整问题解决
2020/07/28 Python
HTML5 背景的显示区域实现
2020/07/09 HTML / CSS
人事专员的职责
2014/02/26 职场文书
拔河比赛口号
2014/06/10 职场文书
干货:如何写好观后感 !
2019/05/21 职场文书
原生JS实现飞机大战小游戏
2021/06/09 Javascript