php判断某个方法是否存在函数function_exists (),method_exists()与is_callable()区别与用法解析


Posted in PHP onApril 20, 2020

本文实例讲述了php判断某个方法是否存在函数function_exists (),method_exists()与is_callable()区别与用法。分享给大家供大家参考,具体如下:

php函数function_exists (),method_exists() 与is_callable()的区别在哪?

先来讲下后两个:method_exists() 与is_callable():

在php面相对象设计过程中,往往我们需要在调用某一个方法是否属于某一个类的时候做出判断,常用的方法有 method_exists()和is_callable()

    相比之下,is_callable()函数要高级一些,它接受字符串变量形式的方法名作为 第一个参数,如果类方法存在并且可以调用,则返回true。如果要检测类中的方法是否能被调用,可以给函数传递一个数组而不是类的方法名作为参数。数组必须包含对象或类名,以将其作为它的第一个元素,要检查的方法名则作为第二个元素。如果该方法在类中存在,函数返回true。

接下来看一段代码:

<?php 
class test {
  public function a() {
    return "test";
  }

}
class abc{
  public function a($object,$funcName) {
    if(!is_callable(array($object,$funcName))) {//检测方法:$funcName是否存在于$object中,并且属于正常的调用结构
      echo "Error: the"." ".$funcName." no exist in " .$object."</br>";
    } else {
      echo "ok";
    }
  }
}
$abc = new abc();
$abc->a("test","111");
$abc->a("test","a");

结果显示如图:

php判断某个方法是否存在函数function_exists (),method_exists()与is_callable()区别与用法解析

那么 如果把test类中的a方法改成私有的 或者是 受保护的 将会是什么样的结果呢?

代码如图:

php判断某个方法是否存在函数function_exists (),method_exists()与is_callable()区别与用法解析

结果如图:

php判断某个方法是否存在函数function_exists (),method_exists()与is_callable()区别与用法解析

好了我们再来看一下 method_exists()这个函数:

 php判断某个方法是否存在函数function_exists (),method_exists()与is_callable()区别与用法解析

结果:

php判断某个方法是否存在函数function_exists (),method_exists()与is_callable()区别与用法解析

到这里结论不用讲也应该清楚了吧?

php中的method_exists()和is_callable()的区别是什么呢?

php函数method_exists()与is_callable()的区别在于在php5中,一个方法存在并不意味着它就可以被调用。对于 private,protected和public类型的方法,method_exits()会返回true,但是is_callable()会检查存在其是否可以访问,如果是private,protected类型的,它会返回false。

然后还剩下一个 function_exists(),

这个比上两个的检测强度来讲是最弱的 因为 只有一个参数   函数名 $string  只会判断函数有没有被定义

总结一下:

function_exists 比较简单点就是判断函数有没有被定义 而method_exists 是判断类内的方法存不存在  is_callable 检测参数是否为合法的可调用结构

返回值 都是 bool

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
用header 发送cookie的php代码
Mar 16 PHP
php 方便水印和缩略图的图形类
May 21 PHP
PHP sprintf()函数用例解析
May 18 PHP
linux系统上支持php的 iconv()函数的方法
Oct 01 PHP
解析php函数method_exists()与is_callable()的区别
Jun 21 PHP
PHP 正则判断中文UTF-8或GBK的思路及具体实现
Nov 26 PHP
PHP中FTP相关函数小结
Jul 15 PHP
Zend Framework入门应用实例详解
Dec 11 PHP
浅谈PHP中的错误处理和异常处理
Feb 04 PHP
微信开发之获取JSAPI TICKET
Jul 07 PHP
Laravel框架实现多数据库连接操作详解
Jul 12 PHP
基于laravel缓冲cache的用法详解
Oct 23 PHP
ThinkPHP3.1.2 使用cli命令行模式运行的方法
Apr 14 #PHP
Laravel 框架控制器 Controller原理与用法实例分析
Apr 14 #PHP
Laravel 框架路由原理与路由访问实例分析
Apr 14 #PHP
Laravel 框架基于自带的用户系统实现登录注册及错误处理功能分析
Apr 14 #PHP
PHP 范围解析操作符(::)用法分析【访问静态成员和类常量】
Apr 14 #PHP
PHP 自动加载类原理与用法实例分析
Apr 14 #PHP
php操作redis常见方法示例【key与value操作】
Apr 14 #PHP
You might like
PHP获取当前文件所在目录 getcwd()函数
2009/05/13 PHP
PHP和javascript常用正则表达式及用法实例
2014/07/01 PHP
php通过array_shift()函数移除数组第一个元素的方法
2015/03/18 PHP
EasyUI中的tree用法介绍
2011/11/01 Javascript
JavaScript单元测试ABC
2012/04/12 Javascript
jQuery 菜单随滚条改为以定位方式(固定要浏览器顶部)
2012/05/24 Javascript
javascript动画浅析
2012/08/30 Javascript
jquery焦点图片切换(数字标注/手动/自动播放/横向滚动)
2013/01/24 Javascript
浅谈javascript的Touch事件
2015/09/27 Javascript
js格式化时间的方法
2015/12/18 Javascript
利用jsonp解决js读取本地json跨域的问题
2018/12/11 Javascript
详解微信小程序-扫一扫 wx.scanCode() 扫码大变身
2019/04/30 Javascript
微信小程序实现的canvas合成图片功能示例
2019/05/03 Javascript
jquery弹窗时禁止body滚动条滚动的例子
2019/09/21 jQuery
解决vue动态下拉菜单 有数据未反应的问题
2020/08/06 Javascript
[39:19]完美世界DOTA2联赛PWL S2 SZ vs LBZS 第二场 11.26
2020/11/30 DOTA
python中查找excel某一列的重复数据 剔除之后打印
2013/02/10 Python
pyramid配置session的方法教程
2013/11/27 Python
Windows下的Python 3.6.1的下载与安装图文详解(适合32位和64位)
2018/02/21 Python
python自动12306抢票软件实现代码
2018/02/24 Python
django 修改server端口号的方法
2018/05/14 Python
如何利用python制作时间戳转换工具详解
2018/09/12 Python
python检测服务器端口代码实例
2019/08/31 Python
Python 中list ,set,dict的大规模查找效率对比详解
2019/10/11 Python
opencv之为图像添加边界的方法示例
2019/12/26 Python
pycharm 中mark directory as exclude的用法详解
2020/02/14 Python
如何用css3实现switch组件开关的方法
2018/02/09 HTML / CSS
英国在线房屋中介网站:Yopa
2018/01/09 全球购物
荷兰最大的多品牌男装连锁店:Adam Brandstore
2019/12/31 全球购物
加拿大拼图大师:Puzzle Master
2020/12/28 全球购物
传播学专业毕业生自荐信
2013/11/04 职场文书
策划创业计划书
2014/02/06 职场文书
大学生社会实践自我鉴定
2014/03/24 职场文书
合理化建议书
2015/02/04 职场文书
唐山大地震的观后感
2015/06/05 职场文书
VUE之图片Base64编码使用ElementUI组件上传
2022/04/09 Vue.js