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 相关文章推荐
十天学会php之第五天
Oct 09 PHP
php根据年月获取季度的方法
Mar 31 PHP
php导出CSV抽象类实例
Sep 24 PHP
thinkphp文件引用与分支结构用法实例
Nov 26 PHP
php实现的网络相册图片防盗链完美破解方法
Jul 01 PHP
PHP CURL采集百度搜寻结果图片不显示问题的解决方法
Feb 03 PHP
thinkPHP5 ACL用户权限模块用法详解
May 10 PHP
PHP自定义函数判断是否为Get、Post及Ajax提交的方法
Jul 27 PHP
PHP使用GD库制作验证码的方法(点击验证码或看不清会刷新验证码)
Aug 15 PHP
PHP实现的服务器一致性hash分布算法示例
Aug 09 PHP
laravel框架数据库配置及操作数据库示例
Oct 10 PHP
JS中彻底删除JSON对象组成的数组中的元素
Sep 22 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
基于mysql的bbs设计(三)
2006/10/09 PHP
PHP中文件上传的一个问题
2010/09/04 PHP
yiic命令时提示“php.exe”不是内部或外部命令的解决方法
2014/12/18 PHP
nginx下安装php7+php5
2016/07/31 PHP
jQuery EasyUI API 中文文档 - Menu菜单
2011/10/03 Javascript
jQuery 事件的命名空间简单了解
2013/11/22 Javascript
JS实现让访问者自助选择网页文字颜色的方法
2015/02/24 Javascript
浅析nodejs实现Websocket的数据接收与发送
2015/11/19 NodeJs
js实现页面a向页面b传参的方法
2016/05/29 Javascript
Bootstrap 附加导航(Affix)插件实例详解
2016/06/01 Javascript
ECMAScript6轮播图实践知识总结
2016/08/17 Javascript
jQuery获取选中单选按钮radio的值
2016/12/27 Javascript
微信小程序 引入es6 promise
2017/04/12 Javascript
Vue.js项目部署到服务器的详细步骤
2017/07/17 Javascript
js事件委托和事件代理案例分享
2017/07/25 Javascript
Vue.js实现输入框绑定的实例代码
2017/08/24 Javascript
代码详解JS操作剪贴板
2018/02/11 Javascript
Vue.js+Layer表格数据绑定与实现更新的实例
2018/03/07 Javascript
webpack中如何使用雪碧图的示例代码
2018/11/11 Javascript
原生js实现简单轮播图
2020/10/26 Javascript
python版简单工厂模式
2017/10/16 Python
Python内置函数delattr的具体用法
2017/11/23 Python
在PyCharm下使用 ipython 交互式编程的方法
2019/01/17 Python
Appium+python自动化怎么查看程序所占端口号和IP
2019/06/14 Python
使用Python做垃圾分类的原理及实例代码附源码
2019/07/02 Python
Python xlrd模块导入过程及常用操作
2020/06/10 Python
CSS3+font字体文件实现圆形半透明菜单具体步骤(图解)
2013/06/03 HTML / CSS
Joules美国官网:出色的英国风格
2017/10/30 全球购物
美国婚礼礼品网站:MyWeddingFavors
2018/09/26 全球购物
Prototype中如何为一个元素添加一个方法
2014/12/08 面试题
药剂学专业应届生自荐信
2013/09/29 职场文书
自荐信怎么写呢?
2013/12/09 职场文书
个人授权委托书样本
2014/09/13 职场文书
学前班语言教学计划
2015/01/20 职场文书
python glom模块的使用简介
2021/04/13 Python
Python多线程 Queue 模块常见用法
2021/07/04 Python