解析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中使用Oracle数据库(2)
Oct 09 PHP
建立文件交换功能的脚本(一)
Oct 09 PHP
php仿discuz分页效果代码
Oct 02 PHP
使ecshop模板中可引用常量的实现方法
Jun 02 PHP
PHP定时执行任务实现方法详解(Timer)
Jul 30 PHP
php读取txt文件并将数据插入到数据库
Feb 23 PHP
100行PHP代码实现socks5代理服务器
Apr 28 PHP
thinkphp3.x中display方法及show方法的用法实例
May 19 PHP
修改Laravel5.3中的路由文件与路径
Aug 10 PHP
thinkphp中多表查询中防止数据重复的sql语句(必看)
Sep 22 PHP
PHP+JS实现的商品秒杀倒计时用法示例
Nov 15 PHP
详解no input file specified 三种解决方法
Nov 29 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 程序授权验证开发思路
2009/07/09 PHP
Thinkphp将二维数组变为标签适用的一维数组方法总结
2014/10/30 PHP
PHP操作mysql数据库分表的方法
2016/06/09 PHP
php中的登陆login实例代码
2016/06/20 PHP
thinkPHP基于ajax实现的菜单与分页示例
2016/07/12 PHP
使用Codeigniter重写insert的方法(推荐)
2017/03/23 PHP
基于PHP常用文件函数和目录函数整理
2017/08/17 PHP
Ajax+Jpgraph实现的动态折线图功能示例
2019/02/11 PHP
Yii2框架自定义类统一处理url操作示例
2019/05/25 PHP
Jquery 设置标题的自动翻转
2009/10/03 Javascript
jquery 弹出登录窗口实现代码
2009/12/24 Javascript
jquery获取input的value问题说明
2010/08/19 Javascript
jQuery学习笔记之Helloworld
2010/12/22 Javascript
javascript学习笔记(二十) 获得和设置元素的特性(属性)
2012/06/20 Javascript
javascript和jQuery实现网页实时聊天的ajax长轮询
2016/07/20 Javascript
利用jquery实现验证输入的是否是数字、小数,包含保留几位小数
2016/12/07 Javascript
简单实现AngularJS轮播图效果
2020/04/10 Javascript
JS笛卡尔积算法与多重数组笛卡尔积实现方法示例
2017/12/01 Javascript
详解如何在vue-cli中使用vuex
2018/08/07 Javascript
vue 实现v-for循环回来的数据动态绑定id
2019/11/07 Javascript
Vue路由 重定向和别名的区别说明
2020/09/09 Javascript
使用Python进行稳定可靠的文件操作详解
2013/12/31 Python
Python单元测试框架unittest使用方法讲解
2015/04/13 Python
Python利用matplotlib生成图片背景及图例透明的效果
2017/04/27 Python
Python3爬虫爬取百姓网列表并保存为json功能示例【基于request、lxml和json模块】
2018/12/05 Python
通过python扫描二维码/条形码并打印数据
2019/11/14 Python
Python模块 _winreg操作注册表
2020/02/05 Python
python基于opencv实现人脸识别
2021/01/04 Python
英国广泛的照明产品网站:Lights4living
2018/01/28 全球购物
北美女性服装零售连锁店:maurices
2019/06/12 全球购物
销售冠军获奖感言
2014/02/03 职场文书
幼儿园园长工作总结2015
2015/05/25 职场文书
迎新生晚会主持词
2015/06/30 职场文书
2015年库房管理工作总结
2015/10/14 职场文书
使用Python的开发框架Brownie部署以太坊智能合约
2021/05/28 Python
Python 中 Shutil 模块详情
2021/11/11 Python