解析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下几个常用的去空、分组、调试数组函数
Feb 22 PHP
浅析PHP Socket技术
Aug 02 PHP
php调用新浪短链接API的方法
Nov 08 PHP
LINUX下PHP程序实现WORD文件转化为PDF文件的方法
May 13 PHP
php array_keys 返回数组的键名
Oct 25 PHP
PHP生成图片验证码功能示例
Jan 12 PHP
PHP对象相关知识总结
Apr 09 PHP
Yii 2中的load()和save()示例详解
Aug 03 PHP
PHP定义字符串的四种方式详解
Feb 06 PHP
PHP Swoole异步Redis客户端实现方法示例
Oct 24 PHP
tp5框架前台无限极导航菜单类实现方法分析
Mar 29 PHP
Laravel 框架路由原理与路由访问实例分析
Apr 14 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性能优化 产生高度优化代码
2011/07/22 PHP
php使用pdo连接mssql server数据库实例
2014/12/25 PHP
php常见的魔术方法详解
2014/12/25 PHP
详解php与ethereum客户端交互
2018/04/28 PHP
判断多个元素(RADIO,CHECKBOX等)是否被选择的原理说明
2009/02/18 Javascript
Javascript学习笔记5 类和对象
2010/01/11 Javascript
JavaScript在XHTML中的用法详解
2013/04/11 Javascript
JavaScript设置首页和收藏页面的小例子
2013/11/11 Javascript
jQuery之动画效果大全
2016/11/09 Javascript
jQuery扩展_动力节点Java学院整理
2017/07/05 jQuery
Underscore之Array_动力节点Java学院整理
2017/07/10 Javascript
微信小程序实现根据字母选择城市功能
2017/08/16 Javascript
Thinkphp5微信小程序获取用户信息接口的实例详解
2017/09/26 Javascript
详解Node.js利用node-git-server快速搭建git服务器
2017/09/27 Javascript
vue单页应用的内存泄露定位和修复问题小结
2019/08/02 Javascript
webpack的tree shaking的实现方法
2019/09/18 Javascript
VUE页面中通过双击实现复制表格中内容的示例代码
2020/06/11 Javascript
JavaScript中clientWidth,offsetWidth,scrollWidth的区别
2021/01/25 Javascript
[01:14:34]DOTA2上海特级锦标赛C组资格赛#2 LGD VS Newbee第一局
2016/02/28 DOTA
[00:56]跨越时空加入战场 全新祈求者身心“失落奇艺侍祭”展示
2019/07/20 DOTA
Python中实现远程调用(RPC、RMI)简单例子
2014/04/28 Python
Python Flask框架扩展操作示例
2019/05/03 Python
Python中的 sort 和 sorted的用法与区别
2019/08/10 Python
使用TensorFlow搭建一个全连接神经网络教程
2020/02/06 Python
python的列表List求均值和中位数实例
2020/03/03 Python
python中adb有什么功能
2020/06/07 Python
Python xlwt模块使用代码实例
2020/06/10 Python
Pycharm 2020.1 版配置优化的详细教程
2020/08/07 Python
美国CVS药店官网:CVS Pharmacy
2018/07/26 全球购物
Microsoft Advertising美国:微软搜索广告
2019/05/01 全球购物
Delphi笔试题
2016/11/14 面试题
PHP引擎php.ini参数优化深入讲解
2021/03/24 PHP
童装店创业计划书
2014/01/09 职场文书
简易离婚协议书(范本)
2014/10/25 职场文书
大四学生个人总结
2015/02/15 职场文书
python 实现mysql自动增删分区的方法
2021/04/01 Python