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基础学习笔记
Mar 18 PHP
IIS+fastcgi下PHP运行超时问题的解决办法详解
Jun 20 PHP
PHP开发框架kohana中处理ajax请求的例子
Jul 14 PHP
PHP生成条形图的方法
Dec 10 PHP
php实现过滤UBB代码的类
Mar 12 PHP
PHP5.3新特性小结
Feb 14 PHP
php一个文件搞定微信jssdk配置
Dec 12 PHP
php利用array_search与array_column实现二维数组查找
Jul 08 PHP
asp.net和php的区别点总结
Oct 10 PHP
laravel 解决多库下的DB::transaction()事务失效问题
Oct 21 PHP
php使用fputcsv实现大数据的导出操作详解
Feb 27 PHP
PHP后门隐藏的一些技巧总结
Nov 04 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
实用函数8
2007/11/08 PHP
php内嵌函数用法实例
2015/03/20 PHP
以文件形式缓存php变量的方法
2015/06/26 PHP
PHP模板引擎Smarty内建函数foreach,foreachelse用法分析
2016/04/11 PHP
对PHP依赖注入的理解实例分析
2016/10/09 PHP
jQuery的控件及事件(输入控件及回车事件)使用示例
2013/07/25 Javascript
jQuery DOM操作实例
2014/03/05 Javascript
js实现图片拖动改变顺序附图
2014/05/13 Javascript
jquery制作select列表双向选择示例代码
2014/09/02 Javascript
js Object2String方便查看js对象内容
2014/11/24 Javascript
JS获取多维数组中相同键的值实现方法示例
2017/01/06 Javascript
Angularjs中使用layDate日期控件示例
2017/01/11 Javascript
jQuery事件_动力节点Java学院整理
2017/07/05 jQuery
vue实现自定义多选按钮
2020/07/16 Javascript
JavaScript 实现轮播图特效的示例
2020/11/05 Javascript
vite2.0+vue3移动端项目实战详解
2021/03/03 Vue.js
[01:03:00]DOTA2上海特级锦标赛A组败者赛 EHOME VS CDEC第一局
2016/02/25 DOTA
python 实现归并排序算法
2012/06/05 Python
深入理解Javascript中的this关键字
2015/03/27 Python
Python学习小技巧之列表项的排序
2017/05/20 Python
Python基于辗转相除法求解最大公约数的方法示例
2018/04/04 Python
python PIL/cv2/base64相互转换实例
2020/01/09 Python
可视化pytorch 模型中不同BN层的running mean曲线实例
2020/06/24 Python
详解pytorch tensor和ndarray转换相关总结
2020/09/03 Python
英国简约舒适女装品牌:Great Plains
2018/07/27 全球购物
宏碁西班牙官网:Acer西班牙
2021/01/08 全球购物
WebSphere面试题:在WebSphere里面如何部署一个应用
2015/08/02 面试题
《走一步再走一步》教学反思
2014/02/15 职场文书
十八届三中全会感言
2014/03/10 职场文书
《广玉兰》教学反思
2014/04/14 职场文书
企业总经理任命书
2014/06/05 职场文书
学校教师安全责任书
2014/07/23 职场文书
学生安全责任书范本
2014/07/24 职场文书
高一课前三分钟演讲稿
2014/09/13 职场文书
家长对孩子的寒假评语
2015/10/09 职场文书
Linux系统下MySQL配置主从分离的步骤
2022/03/21 MySQL