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输出xml格式字符串(用的这个)
Jul 12 PHP
php打开文件fopen函数的使用说明
Jul 05 PHP
PHP的变量类型和作用域详解
Mar 12 PHP
php实现的替换敏感字符串类实例
Sep 22 PHP
CI框架安全类Security.php源码分析
Nov 04 PHP
PHP常用处理静态操作类
Apr 03 PHP
PHP性能分析工具XHProf安装使用教程
May 13 PHP
php微信开发之关注事件
Jun 14 PHP
PHP Cli 模式设置进程名称的方法
Jun 12 PHP
PHP实现财务审核通过后返现金额到客户的功能
Jul 04 PHP
Thinkphp 框架基础之源码获取、环境要求与目录结构分析
Apr 27 PHP
PHP类的自动加载与命名空间用法实例分析
Jun 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/03/17 PHP
基于Zend的Captcha机制的应用
2013/05/02 PHP
总结PHP删除字符串最后一个字符的三种方法
2016/08/30 PHP
如何在PHP中生成随机数
2020/06/04 PHP
JavaScript动态插入script的基本思路及实现函数
2013/11/11 Javascript
JavaScript按位运算符的应用简析
2014/02/04 Javascript
js 事件截取enter按键页面提交事件示例代码
2014/03/04 Javascript
jQuery中toggle()函数的使用实例
2015/04/17 Javascript
javascript中对Date类型的常用操作小结
2016/05/19 Javascript
javascript经典特效分享 手风琴、轮播图、图片滑动
2016/09/14 Javascript
JavaScript 栈的详解及实例代码
2017/01/22 Javascript
jQuery实现搜索页面关键字的功能
2017/02/16 Javascript
如何正确理解javascript的模块化
2017/03/02 Javascript
微信小程序 下拉列表的实现实例代码
2017/03/08 Javascript
JS字符串按逗号和回车分隔的方法
2017/04/25 Javascript
Vue2.0 给Tab标签页和页面切换过渡添加样式的方法
2018/03/13 Javascript
p5.js 毕达哥拉斯树的实现代码
2018/03/23 Javascript
Nodejs实现爬虫抓取数据实例解析
2018/07/05 NodeJs
微信小程序webview与h5通过postMessage实现实时通讯的实现
2019/08/20 Javascript
Javascript柯里化实现原理及作用解析
2020/10/22 Javascript
python将html转成PDF的实现代码(包含中文)
2013/03/04 Python
Python语言编写电脑时间自动同步小工具
2013/03/08 Python
centos 下面安装python2.7 +pip +mysqld
2014/11/18 Python
Python中的with语句与上下文管理器学习总结
2016/06/28 Python
Python实现ssh批量登录并执行命令
2016/10/25 Python
Python爬取网页中的图片(搜狗图片)详解
2017/03/23 Python
为什么选择python编程语言入门黑客攻防 给你几个理由!
2018/02/02 Python
Pycharm 设置默认头的图文教程
2019/01/17 Python
Keras-多输入多输出实例(多任务)
2020/06/22 Python
任意一块网页内容实现“活”的背景(目前火狐浏览器专有)
2014/05/07 HTML / CSS
中英文自我评价常用句型
2013/12/19 职场文书
十岁生日父母答谢词
2014/01/18 职场文书
标准化管理实施方案
2014/02/25 职场文书
英语教师岗位职责
2014/03/16 职场文书
公司酒会致辞
2015/07/30 职场文书
初中生活随笔
2015/08/15 职场文书