解析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 dirname(__FILE__) 获取当前文件的绝对路径
Jun 28 PHP
用PHP实现Ftp用户的在线管理
Feb 16 PHP
深入理解require与require_once与include以及include_once的区别
Jun 05 PHP
php遍历目录与文件夹的多种方法详解
Nov 14 PHP
eaglephp使用微信api接口开发微信框架
Jan 09 PHP
ThinkPHP3.1新特性之查询条件预处理简介
Jun 19 PHP
php实现ip白名单黑名单功能
Mar 12 PHP
PHP四种基本排序算法示例
Apr 09 PHP
yii2使用ajax返回json的实现方法
May 14 PHP
PHP简单预防sql注入的方法
Sep 27 PHP
php执行多个存储过程的方法【基于thinkPHP】
Nov 08 PHP
php rsa 加密,解密,签名,验签详解
Dec 06 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
咖啡的植物学知识
2021/03/03 咖啡文化
深入分析php中接口与抽象类的区别
2013/06/08 PHP
PHP数据过滤的方法
2013/10/30 PHP
PHP number_format函数原理及实例解析
2020/07/14 PHP
ThinkPHP5.1的权限控制怎么写?分享一个AUTH权限控制
2021/03/09 PHP
探索Emberjs制作一个简单的Todo应用
2012/11/07 Javascript
jQuery实用基础超详细介绍
2013/04/11 Javascript
借助FileReader实现将文件编码为Base64后通过AJAX上传
2015/12/24 Javascript
如何使用jquery修改css中带有!important的样式属性
2016/04/28 Javascript
Javascript 高性能之递归,迭代,查表法详解及实例
2017/01/08 Javascript
jquery 实现复选框的全选操作实例代码
2017/01/24 Javascript
URL中“#” “?” &“”号的作用浅析
2017/02/04 Javascript
JavaScript中的toString()和toLocaleString()方法的区别
2017/02/15 Javascript
JS实现十分钟倒计时代码实例
2018/10/18 Javascript
浅谈layui 数据表格前后台传值的问题
2019/09/12 Javascript
JS实现前端路由功能示例【原生路由】
2020/05/29 Javascript
python 文件和路径操作函数小结
2009/11/23 Python
详谈python3中用for循环删除列表中元素的坑
2018/04/19 Python
如何用Python实现简单的Markdown转换器
2018/07/16 Python
对python中大文件的导入与导出方法详解
2018/12/28 Python
Python 3.8新特征之asyncio REPL
2019/05/28 Python
python和mysql交互操作实例详解【基于pymysql库】
2019/06/04 Python
python实现文本进度条 程序进度条 加载进度条 单行刷新功能
2019/07/03 Python
详解Python中字符串前“b”,“r”,“u”,“f”的作用
2019/12/18 Python
html5 canvas绘制网络字体的常用方法
2019/08/26 HTML / CSS
高尔夫球鞋、服装、手套和装备:FootJoy
2018/12/15 全球购物
捷克街头、运动和滑板一站式商店:BoardStar.cz
2019/10/06 全球购物
英语翻译系毕业生求职信
2013/09/29 职场文书
英文版网络工程师求职信
2013/10/28 职场文书
评析教师个人的自我评价
2014/02/19 职场文书
保护环境建议书作文500字
2015/09/14 职场文书
幼儿园开学家长寄语(2016秋季)
2015/12/03 职场文书
保险公司2016开门红口号集锦
2015/12/24 职场文书
2016年九九重阳节活动总结
2016/04/01 职场文书
表扬稿表扬信的格式及范文
2019/06/24 职场文书
Apache Calcite 实现方言转换的代码
2021/04/24 Servers