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 相关文章推荐
判“新”函数:得到今天与明天的秒数
Oct 09 PHP
php判断字符以及字符串的包含方法属性
Aug 30 PHP
php Notice: Undefined index 错误提示解决方法
Aug 29 PHP
PHP session有效期session.gc_maxlifetime
Apr 20 PHP
PHP 循环删除无限分类子节点的实现代码
Jun 21 PHP
PHP系统命令函数使用分析
Jul 05 PHP
php strnatcmp()函数的用法总结
Nov 27 PHP
php字符串按照单词进行反转的方法
Mar 14 PHP
PHP基于文件存储实现缓存的方法
Jul 20 PHP
PHP判断手机是IOS还是Android
Dec 09 PHP
Laravel 中使用 Vue.js 实现基于 Ajax 的表单提交错误验证操作
Jun 30 PHP
PHP用swoole+websocket和redis实现web一对一聊天
Nov 05 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 七大优势分析
2009/06/23 PHP
详解Yii2.0使用AR联表查询实例
2017/06/16 PHP
利用php操作memcache缓存的基础方法示例
2017/08/02 PHP
PHP之header函数详解
2021/03/02 PHP
Javascript &amp; DHTML 实例编程(教程)DOM基础和基本API
2007/06/02 Javascript
url地址自动加#号问题说明
2010/08/21 Javascript
jquery.boxy弹出框(后隔N秒后自动隐藏/自动跳转)
2013/01/15 Javascript
采用call方式实现js继承
2014/05/20 Javascript
jQuery菜单插件用法实例
2015/07/25 Javascript
利用JS生成博文目录及CSS定制博客
2016/02/10 Javascript
Js得到radiobuttonlist选中值的两种方法(推荐)
2016/08/25 Javascript
vue.js利用defineProperty实现数据的双向绑定
2017/04/28 Javascript
jQuery Validate 校验多个相同name的方法
2017/05/18 jQuery
Node.js使用MySQL连接池的方法实例
2018/02/11 Javascript
详解promise.then,process.nextTick, setTimeout 以及 setImmediate的执行顺序
2018/11/21 Javascript
vue实现购物车小案例
2019/09/27 Javascript
解决vuex数据异步造成初始化的时候没值报错问题
2019/11/13 Javascript
[01:52]2014DOTA2西雅图邀请赛 V社开大会你不知道的小秘密
2014/07/08 DOTA
[02:57]2014DOTA2国际邀请赛 选手辛苦解说更辛苦
2014/07/10 DOTA
python机器学习之神经网络(一)
2017/12/20 Python
微信跳一跳python辅助软件思路及图像识别源码解析
2018/01/04 Python
Python导入模块包原理及相关注意事项
2020/03/25 Python
CSS3的calc()做响应模式布局的实现方法
2017/09/06 HTML / CSS
CSS3 旋转立方体问题详解
2020/01/09 HTML / CSS
利用canvas实现图片下载功能来实现浏览器兼容问题
2019/05/31 HTML / CSS
Javascript 高级手势使用介绍
2013/04/21 HTML / CSS
幼师岗位求职简历的自荐信格式
2013/09/21 职场文书
工商管理毕业生推荐信
2013/12/24 职场文书
毕业生就业意向书
2014/04/01 职场文书
双方协议书
2014/04/22 职场文书
法制宣传标语
2014/06/23 职场文书
水电工程师岗位职责
2015/02/13 职场文书
2015年学校食堂工作总结
2015/04/22 职场文书
卫生主题班会
2015/08/14 职场文书
2016党员入党决心书
2015/09/22 职场文书
SQL Server #{}可以防止SQL注入
2022/05/11 SQL Server