解析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字符串截取中文截取2,单字节截取模式
Dec 10 PHP
探讨:如何通过stats命令分析Memcached的内部状态
Jun 14 PHP
php对二维数组按指定键值key排序示例代码
Nov 26 PHP
9段PHP实用功能的代码推荐
Oct 14 PHP
PHP实现的简单日历类
Nov 29 PHP
php程序内部post数据的方法
Mar 31 PHP
PHP基于单例模式实现的mysql类
Jan 09 PHP
thinkphp框架page类与bootstrap分页(美化)
Jun 25 PHP
PHP5.6读写excel表格文件操作示例
Feb 26 PHP
php快速导入大量数据的实例方法
Sep 23 PHP
PHP getID3类的使用方法学习笔记【附getID3源码下载】
Oct 18 PHP
PHP实现微信公众号验证Token的示例代码
Dec 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 实现身份验证代码
2010/03/24 PHP
php 文件上传后缀名与文件类型对照表(几乎涵盖所有文件)
2010/05/16 PHP
一个PHP的远程图片抓取函数分享
2013/09/25 PHP
利用PHP函数计算中英文字符串长度的方法
2014/11/11 PHP
thinkphp使用phpmailer发送邮件的方法
2014/11/24 PHP
MacOS 安装 PHP的图片裁剪扩展Tclip
2015/03/25 PHP
PHP使用file_get_content设置头信息的方法
2016/02/14 PHP
yii2.0数据库迁移教程【多个数据库同时同步数据】
2016/10/08 PHP
thinkPHP+LayUI 流加载实现功能
2019/09/27 PHP
js动态设置div的值下例子
2013/10/29 Javascript
javascript实现俄罗斯方块游戏的思路和方法
2015/04/27 Javascript
js实现基于正则表达式的轻量提示插件
2015/08/29 Javascript
推荐10 个很棒的 jQuery 特效代码
2015/10/04 Javascript
jQuery实现字符串全部替换的方法【推荐】
2017/03/09 Javascript
完美解决手机浏览器顶部下拉出现网页源或刷新的问题
2017/11/30 Javascript
clipboard在vue中的使用的方法示例
2018/10/19 Javascript
微信小程序云开发实现数据添加、查询和分页
2019/05/17 Javascript
[03:01]2014DOTA2国际邀请赛 小组赛7月13日TOPPLAY
2014/07/14 DOTA
Python中使用tarfile压缩、解压tar归档文件示例
2015/04/05 Python
Django进阶之CSRF的解决
2018/08/01 Python
python读取Excel实例详解
2018/08/17 Python
利用Python将数值型特征进行离散化操作的方法
2018/11/06 Python
python绘制散点图并标记序号的方法
2018/12/11 Python
python实现AES加密和解密
2019/03/27 Python
如何通过50行Python代码获取公众号全部文章
2019/07/12 Python
Django之使用celery和NGINX生成静态页面实现性能优化
2019/10/08 Python
Cython编译python为so 代码加密示例
2019/12/23 Python
python logging.info在终端没输出的解决
2020/05/12 Python
查看keras的默认backend实现方式
2020/06/19 Python
中国跨境在线时尚零售商:Bellelily
2018/04/06 全球购物
servlet面试题
2012/08/20 面试题
低碳环保口号
2014/06/12 职场文书
个人房屋租赁合同(标准范本)
2019/09/16 职场文书
《攀登者》:“海拔8000米以上,你不能指望任何人”
2019/11/25 职场文书
python批量更改目录名/文件名的方法
2021/04/18 Python
Vue3实现简易音乐播放器组件
2022/08/14 Vue.js