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自动更新新闻DIY
Oct 09 PHP
给php新手谈谈我的学习心得
Feb 25 PHP
php中$_REQUEST、$_POST、$_GET的区别和联系小结
Nov 23 PHP
php下载文件的代码示例
Jun 29 PHP
Zend Framework中的简单工厂模式 图文
Jul 10 PHP
php中0,null,empty,空,false,字符串关系的详细介绍
Jun 20 PHP
仿dedecms下拉分页样式修改的thinkphp分页类实例
Oct 30 PHP
php+curl 发送图片处理代码分享
Jul 09 PHP
php基于Snoopy解析网页html的方法
Jul 09 PHP
php文件包含目录配置open_basedir的使用与性能详解
Apr 03 PHP
php脚本守护进程原理与实现方法详解
Jul 20 PHP
PHP实现redis限制单ip、单用户的访问次数功能示例
Jun 16 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/12/11 PHP
详解php协程知识点
2018/09/21 PHP
基于mootools插件实现遮罩层新手引导
2012/05/24 Javascript
javascript判断非数字的简单例子
2013/07/18 Javascript
jquery 删除字符串最后一个字符的方法解析
2014/02/11 Javascript
js 动态修改css文件用到了cssRule
2014/08/20 Javascript
angularjs指令中的compile与link函数详解
2014/12/06 Javascript
jquery中ajax处理跨域的三大方式
2016/01/05 Javascript
Ubuntu 16.04 64位中搭建Node.js开发环境教程
2016/10/19 Javascript
js学习总结_选项卡封装(实例讲解)
2017/07/13 Javascript
Element input树型下拉框的实现代码
2018/12/21 Javascript
layui实现数据表格table分页功能(ajax异步)
2019/07/27 Javascript
vue Tab切换以及缓存页面处理的几种方式
2019/11/05 Javascript
vue使用nprogress实现进度条
2019/12/09 Javascript
react国际化化插件react-i18n-auto使用详解
2020/03/31 Javascript
vue+element-ui JYAdmin后台管理系统模板解析
2020/07/28 Javascript
微信小程序实现底部弹出框
2020/11/18 Javascript
js实现简单的轮播图效果
2020/12/13 Javascript
python使用递归解决全排列数字示例
2014/02/11 Python
简单的python后台管理程序
2017/04/13 Python
python实现决策树ID3算法的示例代码
2018/05/30 Python
Python中is和==的区别详解
2018/11/15 Python
Python设计模式之组合模式原理与用法实例分析
2019/01/11 Python
Python实现网站表单提交和模板
2019/01/15 Python
Laravel+Dingo/Api 自定义响应的实现
2019/02/17 Python
Django model select的多种用法详解
2019/07/16 Python
Python如何把Spark数据写入ElasticSearch
2020/04/18 Python
初中音乐教学反思
2014/01/12 职场文书
大学生社会实践自我鉴定
2014/03/24 职场文书
2015届本科毕业生自我鉴定
2014/09/27 职场文书
自我查摆剖析材料
2014/10/11 职场文书
幼儿园推普周活动总结
2015/05/07 职场文书
申论不会写怎么办?教您掌握这6点思维和原则
2019/07/17 职场文书
mysql 8.0.24版本安装配置方法图文教程
2021/05/12 MySQL
mysql如何配置白名单访问
2021/06/30 MySQL
JavaScript设计模式之原型模式详情
2022/06/21 Javascript