解析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 相关文章推荐
56.com视频采集接口程序(PHP)
Sep 22 PHP
PHP 函数学习简单小结
Jul 08 PHP
PHP可逆加密/解密函数分享
Sep 25 PHP
php构造函数实例讲解
Nov 13 PHP
thinkphp文件处理类Dir.class.php的用法分析
Dec 08 PHP
ThinkPHP自定义函数解决模板标签加减运算的方法
Jul 03 PHP
PHP如何将log信息写入服务器中的log文件
Jul 29 PHP
WordPres对前端页面调试时的两个PHP函数使用小技巧
Dec 22 PHP
php实现的统计字数函数定义与使用示例
Jul 26 PHP
php实现统计二进制中1的个数算法示例
Jan 23 PHP
thinkPHP3.2.2框架行为扩展及demo示例
Jun 19 PHP
strpos() 函数判断字符串中是否包含某字符串的方法
Jan 16 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&mysql(五)
2006/10/09 PHP
用PHP和ACCESS写聊天室(七)
2006/10/09 PHP
PHP file_get_contents函数读取远程数据超时的解决方法
2015/05/13 PHP
php版微信公众平台回复中文出现乱码问题的解决方法
2016/09/22 PHP
浅析php中array_map和array_walk的使用对比
2016/11/20 PHP
phpstudy默认不支持64位php的解决方法
2017/02/20 PHP
yii框架使用分页的方法分析
2019/07/25 PHP
浅谈javascript 面向对象编程
2009/10/28 Javascript
jquery中获取select选中值的代码
2011/06/27 Javascript
JavaScript中的变量定义与储存介绍
2014/12/31 Javascript
AngularJS进行性能调优的7个建议
2015/12/28 Javascript
Bootstrap学习笔记之js组件(4)
2016/06/12 Javascript
利用fecha进行JS日期处理
2016/11/21 Javascript
微信小程序页面开发注意事项整理
2017/05/18 Javascript
jQuery实现简单的计时器功能实例分析
2017/08/29 jQuery
深入浅析JSONAPI在PHP中的应用
2017/12/24 Javascript
Vue组件库发布到npm详解
2018/02/17 Javascript
react native基于FlatList下拉刷新上拉加载实现代码示例
2018/09/30 Javascript
vuex如何重置所有state(可定制)
2019/01/17 Javascript
使用Vue 自定义文件选择器组件的实例代码
2020/03/04 Javascript
vue keep-alive的简单总结
2021/01/25 Vue.js
python中字符串变二维数组的实例讲解
2018/04/03 Python
Python面向对象类的继承实例详解
2018/06/27 Python
python实现二级登陆菜单及安装过程
2019/06/21 Python
css3使用animation属性实现炫酷效果(推荐)
2020/02/04 HTML / CSS
俄罗斯有趣和原创礼物网上商店:MagicMag
2019/08/01 全球购物
世界上最伟大的马产品:Equiderma
2020/01/07 全球购物
一套Java笔试题
2016/08/20 面试题
设计模式的基本要素是什么
2014/04/21 面试题
药品采购员岗位职责
2014/02/08 职场文书
供应链金融服务方案
2014/05/25 职场文书
早读课迟到检讨书
2014/09/25 职场文书
公司领导班子民主生活会对照检查材料
2014/10/02 职场文书
寻衅滋事罪辩护词
2015/05/21 职场文书
当幸福来敲门观后感
2015/06/01 职场文书
pygame面向对象的飞行小鸟实现(Flappy bird)
2021/04/01 Python