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源代码
Aug 21 PHP
PHP使用GIFEncoder类处理gif图片实例
Jul 01 PHP
ThinkPHP控制器里javascript代码不能执行的解决方法
Nov 22 PHP
PHP面试题之文件目录操作
Oct 15 PHP
thinkPHP实现递归循环栏目并按照树形结构无限极输出的方法
May 19 PHP
php设计模式之单例模式代码
Jun 11 PHP
教你在header中隐藏php的版本信息
Aug 10 PHP
PHP简单判断手机设备的方法
Aug 23 PHP
php基于单例模式封装mysql类完整实例
Oct 18 PHP
PHP编程快速实现数组去重的方法详解
Jul 22 PHP
PHP实现广度优先搜索算法(BFS,Broad First Search)详解
Sep 16 PHP
Thinkphp5 如何隐藏入口文件index.php(URL重写)
Oct 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设计模式 Command(命令模式)
2011/06/26 PHP
CodeIgniter实现从网站抓取图片并自动下载到文件夹里的方法
2015/06/17 PHP
浅谈PHP链表数据结构(单链表)
2016/06/08 PHP
PHP验证终端类型是否为手机的简单实例
2017/02/07 PHP
用jquery实现下拉菜单效果的代码
2010/07/25 Javascript
js定时器(执行一次、重复执行)
2014/03/07 Javascript
取得元素的左和上偏移量的方法
2014/09/17 Javascript
js实现二代身份证号码验证详解
2014/11/20 Javascript
程序员必知35个jQuery 代码片段
2015/11/05 Javascript
javascript图片滑动效果实现
2021/01/28 Javascript
jquery制作属于自己的select自定义样式
2015/11/23 Javascript
vue2.0中goods选购栏滚动算法的实现代码
2017/05/17 Javascript
详解Vue2.x-directive的学习笔记
2017/07/17 Javascript
详解Vue单元测试case写法
2018/05/24 Javascript
极简的Python入门指引
2015/04/01 Python
Python查找数组中数值和下标相等的元素示例【二分查找】
2019/02/13 Python
Python变量类型知识点总结
2019/02/18 Python
Python实现的旋转数组功能算法示例
2019/02/23 Python
python3 深浅copy对比详解
2019/08/12 Python
python 实现关联规则算法Apriori的示例
2020/09/30 Python
浅析与CSS3的loading动画加载相关的transition优化
2015/05/18 HTML / CSS
苏宁红孩子母婴商城:redbaby
2017/02/12 全球购物
精致的手工皮鞋:Shoe Embassy
2019/11/08 全球购物
介绍Java的内部类
2012/10/27 面试题
Python里面如何拷贝一个对象
2014/02/17 面试题
如果重写了对象的equals()方法,需要考虑什么
2014/11/02 面试题
新品发布会策划方案
2014/06/08 职场文书
学校百日安全生产活动总结
2014/07/05 职场文书
领导班子整改方案和个人整改措施
2014/10/25 职场文书
2014年平安创建工作总结
2014/11/24 职场文书
2015年元旦主持词结束语
2014/12/14 职场文书
领导欢迎词范文
2015/01/26 职场文书
煤矿百日安全活动总结
2015/05/07 职场文书
职场新人刚入职工作总结该怎么写?
2019/05/15 职场文书
详解Python魔法方法之描述符类
2021/05/26 Python
Nginx 反向代理解决跨域问题多种情况分析
2022/01/18 Servers