解析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 判断访客是否为搜索引擎蜘蛛的函数代码
Jul 29 PHP
一些需要禁用的PHP危险函数(disable_functions)
Feb 23 PHP
怎样使用php与jquery设置和读取cookies
Aug 08 PHP
php ImageMagick windows下安装教程
Jan 26 PHP
php实现curl模拟ftp上传的方法
Jul 29 PHP
详解WordPress中过滤链接与过滤SQL语句的方法
Dec 18 PHP
PHP实现伪静态方法汇总
Jan 13 PHP
Laravel中使用FormRequest进行表单验证方法及问题汇总
Jun 19 PHP
CodeIgniter开发实现支付宝接口调用的方法示例
Nov 14 PHP
PHP常用函数总结(180多个)
Dec 25 PHP
PHP+Apache环境中如何隐藏Apache版本
Nov 24 PHP
Thinkphp 框架配置操作之动态配置、扩展配置及批量配置实例分析
May 15 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面向对象之标识对象
2017/06/27 PHP
laravel5.4利用163邮箱发送邮件的步骤详解
2017/09/22 PHP
PHP实现按之字形顺序打印二叉树的方法
2018/01/16 PHP
PHP有序表查找之二分查找(折半查找)算法示例
2018/02/09 PHP
Prototype源码浅析 Enumerable部分之each方法
2012/01/16 Javascript
使用ImageMagick进行图片缩放、合成与裁剪(js+python)
2013/09/16 Javascript
js正则表达exec与match的区别说明
2014/01/29 Javascript
Asp.Net alert弹出提示信息的几种方法总结
2014/01/29 Javascript
JQuery日期插件datepicker的使用方法
2016/03/03 Javascript
Chrome浏览器的alert弹窗禁止再次弹出后恢复的方法
2016/12/30 Javascript
angular.js + require.js构建模块化单页面应用的方法步骤
2017/07/19 Javascript
jQuery+Cookie实现切换皮肤功能【附源码下载】
2018/03/25 jQuery
详解nodejs通过响应回写的方式渲染页面资源
2018/04/07 NodeJs
webuploader分片上传的实现代码(前后端分离)
2018/09/10 Javascript
原生js实现下拉选项卡
2019/11/27 Javascript
vue+ElementUI 关闭对话框清空验证,清除form表单的操作
2020/08/06 Javascript
Python中运行并行任务技巧
2015/02/26 Python
用Python编写一个简单的FUSE文件系统的教程
2015/04/02 Python
利用Pycharm断点调试Python程序的方法
2018/11/29 Python
Python列表对象实现原理详解
2019/07/01 Python
nginx+uwsgi+django环境搭建的方法步骤
2019/11/25 Python
python 初始化一个定长的数组实例
2019/12/02 Python
python中的列表和元组区别分析
2020/12/30 Python
CSS3混合模式mix-blend-mode/background-blend-mode简介
2018/03/15 HTML / CSS
CSS3的一个简单导航栏实现
2015/08/03 HTML / CSS
全球度假村:Club Med
2017/11/27 全球购物
小学英语教学反思案例
2014/02/04 职场文书
高三家长寄语
2014/04/03 职场文书
婚前财产公证书
2014/04/10 职场文书
空气的环保标语
2014/06/12 职场文书
小学校园广播稿(3篇)
2014/09/19 职场文书
毕业证代领委托书
2014/09/26 职场文书
测量员岗位职责
2015/02/14 职场文书
2015年学生会干事工作总结
2015/04/09 职场文书
鲁冰花观后感
2015/06/10 职场文书
python画条形图的具体代码
2022/04/20 Python