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的FTP学习(二)[转自奥索]
Oct 09 PHP
PHP 抓取新浪读书频道的小说并生成txt电子书的代码
Dec 18 PHP
全新的PDO数据库操作类php版(仅适用Mysql)
Jul 22 PHP
定义php常量的详解
Jun 09 PHP
qq登录,新浪微博登录接口申请过程中遇到的问题
Jul 22 PHP
PHP中SQL查询语句的id=%d解释(推荐)
Dec 10 PHP
PHP封装的PDO数据库操作类实例
Jun 21 PHP
PHP使用pdo连接access数据库并循环显示数据操作示例
Jun 05 PHP
Django中通过定时任务触发页面静态化的处理方式
Aug 29 PHP
php实现在线考试系统【附源码】
Sep 18 PHP
Laravel开启跨域请求的方法
Oct 13 PHP
PHP上传图片到数据库并显示的实例代码
Dec 20 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中PDO解决中文乱码问题的一些补充
2010/09/06 PHP
php数据入库前清理 注意php intval与mysql的int取值范围不同
2010/12/12 PHP
使用PHP静态变量当缓存的方法
2013/11/13 PHP
利用PHP命令行模式采集股票趋势信息
2016/08/09 PHP
php生成复杂验证码(倾斜,正弦干扰线,黏贴,旋转)
2018/03/12 PHP
TP5框架请求响应参数实例分析
2019/10/17 PHP
关于jQuery判断元素是否存在的问题示例探讨
2014/07/21 Javascript
Javascript变量的作用域和作用域链详解
2015/04/02 Javascript
JavaScript中数据结构与算法(一):栈
2015/06/19 Javascript
深入了解JavaScript中的Symbol的使用方法
2015/07/28 Javascript
jquery验证手机号是否正确实例讲解
2015/11/17 Javascript
推荐阅读的js快速判断IE浏览器(兼容IE10与IE11)
2015/12/13 Javascript
Nodejs Stream 数据流使用手册
2016/04/17 NodeJs
Bootstrap图片轮播组件Carousel使用方法详解
2016/10/20 Javascript
微信小程序 后台https域名绑定和免费的https证书申请详解
2016/11/10 Javascript
Vue.js开发环境搭建
2016/11/10 Javascript
javascript中神奇的 Date对象小结
2017/10/12 Javascript
vue源码解析之事件机制原理
2018/04/21 Javascript
实例详解ztree在vue项目中使用并且带有搜索功能
2018/08/24 Javascript
使用Sonarqube扫描Javascript代码的示例
2018/12/26 Javascript
node实现爬虫的几种简易方式
2019/08/22 Javascript
JavaScript交换变量常用4种方法解析
2020/09/02 Javascript
Python对象体系深入分析
2014/10/28 Python
学习python中matplotlib绘图设置坐标轴刻度、文本
2018/02/07 Python
Python实现的排列组合、破解密码算法示例
2019/04/12 Python
python数据预处理 :样本分布不均的解决(过采样和欠采样)
2020/02/29 Python
说出数据连接池的工作机制是什么?
2013/04/19 面试题
房地产销售大学生自我评价分享
2013/11/11 职场文书
我的求职计划书
2014/01/10 职场文书
八年级历史教学反思
2014/01/10 职场文书
国庆促销活动总结
2014/08/29 职场文书
广告业务员岗位职责
2015/02/13 职场文书
财务统计员岗位职责
2015/04/14 职场文书
职工宿舍管理制度
2015/08/05 职场文书
关于做家务的心得体会
2016/01/23 职场文书
导游词之四川熊猫基地
2020/01/13 职场文书