解析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实现的功能是显示8条基色色带
Oct 09 PHP
php生成固定长度纯数字编码的方法
Jul 09 PHP
php实现向javascript传递数组的方法
Jul 27 PHP
php基础教程
Aug 26 PHP
PHP简单处理表单输入的特殊字符的方法
Feb 03 PHP
CI映射(加载)数据到view层的方法
Mar 28 PHP
php mysql获取表字段名称和字段信息的三种方法
Nov 13 PHP
thinkphp实现把数据库中的列的值存到下拉框中的方法
Jan 20 PHP
PHP实现重载的常用方法实例详解
Oct 18 PHP
利用PHP判断是手机移动端还是PC端访问的函数示例
Dec 14 PHP
使用Entrust扩展包在laravel 中实现RBAC的功能
Mar 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
实现dedecms全站URL静态化改造的代码
2007/03/29 PHP
php旋转图片90度的方法
2013/11/07 PHP
php mysql PDO 查询操作的实例详解
2017/09/23 PHP
TP - 比RBAC更好的权限认证方式(Auth类认证)
2021/03/09 PHP
为调试JavaScript添加输出窗口的代码
2010/02/07 Javascript
深入理解JavaScript系列(21):S.O.L.I.D五大原则之接口隔离原则ISP详解
2015/03/05 Javascript
CSS+JS实现点击文字弹出定时自动关闭DIV层菜单的方法
2015/05/12 Javascript
Bootstrap入门书籍之(四)菜单、按钮及导航
2016/02/17 Javascript
JS Ajax请求如何防止重复提交
2016/06/13 Javascript
获取input标签的所有属性的方法
2016/06/28 Javascript
angular2 ng build部署后base文件路径问题详细解答
2017/07/15 Javascript
浅析vue-router原理
2018/10/19 Javascript
react-native滑动吸顶效果的实现过程
2019/06/03 Javascript
Angular进行简单单元测试的实现方法实例
2020/08/16 Javascript
学习python 之编写简单乘法运算题
2016/02/27 Python
Django自定义manage命令实例代码
2018/02/11 Python
python dataframe astype 字段类型转换方法
2018/04/11 Python
对python中词典的values值的修改或新增KEY详解
2019/01/20 Python
详解安装mitmproxy以及遇到的坑和简单用法
2019/01/21 Python
Python字符串通过'+'和join函数拼接新字符串的性能测试比较
2019/03/05 Python
Django页面数据的缓存与使用的具体方法
2019/04/23 Python
Python通过socketserver处理多个链接
2020/03/18 Python
python自定义函数def的应用详解
2020/06/03 Python
Python Selenium模块安装使用教程详解
2020/07/09 Python
CSS3实现的文本3D效果附图
2014/09/03 HTML / CSS
UGG澳洲官网:UGG Australia
2018/04/26 全球购物
乌克兰网上珠宝商店:GoldSoveren
2020/03/31 全球购物
Weblogic的布署方式
2013/08/23 面试题
《他得的红圈圈最多》教学反思
2014/04/24 职场文书
政治思想表现评语
2014/05/04 职场文书
酒店管理求职信
2014/06/09 职场文书
2014年扶贫工作总结
2014/11/18 职场文书
2015年校本培训工作总结
2015/07/24 职场文书
Html分层的box-shadow效果的示例代码
2021/03/30 HTML / CSS
浅谈Web Storage API的使用
2021/06/23 Javascript
win10壁纸在哪个文件夹 win10桌面背景图片文件位置分享
2022/08/05 数码科技