解析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 相关文章推荐
投票管理程序
Oct 09 PHP
PHP,ASP.JAVA,JAVA代码格式化工具整理
Jun 15 PHP
php中session_unset与session_destroy的区别分析
Jun 16 PHP
php利用iframe实现无刷新文件上传功能的代码
Sep 29 PHP
php另类上传图片的方法(PHP用Socket上传图片)
Oct 30 PHP
PHP管理依赖(dependency)关系工具 Composer的自动加载(autoload)
Aug 18 PHP
PHP检测链接是否存在的代码实例分享
May 06 PHP
PHP实现微信模拟登陆并给用户发送消息的方法【文字,图片,图文】
Jun 29 PHP
PHP实现的文件浏览器功能简单示例
Sep 12 PHP
基于Laravel(5.4版本)的基本增删改查操作方法
Oct 11 PHP
laravel Task Scheduling(任务调度)在windows下的使用详解
Oct 22 PHP
php中数组最简单的使用方法
Dec 27 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
六酷社区论坛HOME页清新格调免费版 下载
2007/03/07 PHP
解析php函数method_exists()与is_callable()的区别
2013/06/21 PHP
PHP的openssl加密扩展使用小结(推荐)
2016/07/18 PHP
Laravel第三方包报class not found的解决方法
2019/10/13 PHP
PHP设计模式之数据访问对象模式(DAO)原理与用法实例分析
2019/12/12 PHP
Js切换功能的简单方法
2010/11/23 Javascript
node.js中的buffer.copy方法使用说明
2014/12/14 Javascript
jQuery插件实现图片轮播特效
2016/06/16 Javascript
jQuery实现节点的追加、替换、删除、复制功能示例
2017/07/11 jQuery
浅谈vue-router 路由传参的方法
2017/12/27 Javascript
Vue Router去掉url中默认的锚点#
2018/08/01 Javascript
在Vue methods中调用filters里的过滤器实例
2018/08/30 Javascript
Node.js中的不安全跳转如何防御详解
2018/10/21 Javascript
vue子传父关于.sync与$emit的实现
2019/11/05 Javascript
[36:29]2018DOTA2亚洲邀请赛 4.1 小组赛 A组加赛 LGD vs TNC
2018/04/02 DOTA
Python中Collection的使用小技巧
2014/08/18 Python
Django中利用filter与simple_tag为前端自定义函数的实现方法
2017/06/15 Python
50行Python代码实现人脸检测功能
2018/01/23 Python
Django项目使用CircleCI的方法示例
2019/07/14 Python
django一对多模型以及如何在前端实现详解
2019/07/24 Python
python 使用递归回溯完美解决八皇后的问题
2020/02/26 Python
浅谈Python里面None True False之间的区别
2020/07/09 Python
M1芯片安装python3.9.1的实现
2021/02/02 Python
详解CSS3中使用gradient实现渐变效果的方法
2015/08/18 HTML / CSS
CSS3+Sprite实现僵尸行走动画特效源码
2016/01/27 HTML / CSS
JD Sports荷兰:英国领先的运动时尚零售商
2020/03/13 全球购物
世界上最大的皮肤科医生拥有和经营的美容网站:LovelySkin
2021/01/03 全球购物
一些Solaris面试题
2013/03/22 面试题
后勤人员自我评价怎么写
2013/09/19 职场文书
外贸销售员求职的自我评价
2013/11/23 职场文书
应届大学生自荐信
2013/12/05 职场文书
六十大寿答谢词
2014/01/12 职场文书
农行心得体会
2014/09/02 职场文书
施工安全保证书
2015/05/09 职场文书
2016年三八节红领巾广播稿
2015/12/17 职场文书
CSS3 实现的图片悬停的切换按钮
2021/04/13 HTML / CSS