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 相关文章推荐
3
Oct 09 PHP
Access数据库导入Mysql的方法之一
Oct 09 PHP
火车头采集器3.0采集图文教程
Mar 17 PHP
php下删除字符串中HTML标签的函数
Aug 27 PHP
php中的注释、变量、数组、常量、函数应用介绍
Nov 16 PHP
PHP时间戳与日期之间转换的实例介绍
Apr 19 PHP
实现PHP多线程异步请求的3种方法
Jan 17 PHP
destoon设置自定义搜索的方法
Jun 21 PHP
phpmyadmin提示The mbstring extension is missing的解决方法
Dec 17 PHP
PHP简单实现生成txt文件到指定目录的方法
Apr 25 PHP
PHP简单实现数字分页功能示例
Aug 24 PHP
Laravel中的chunk组块结果集处理与注意问题
Aug 15 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.MVC的模板标签系统(一)
2006/09/05 PHP
php download.php实现代码 跳转到下载文件(response.redirect)
2009/08/26 PHP
php日历制作代码分享
2014/01/20 PHP
验证坐标在某坐标区域内php代码
2016/10/08 PHP
JavaScript 面向对象的 私有成员和公开成员
2010/05/13 Javascript
javascript之querySelector和querySelectorAll使用介绍
2011/12/20 Javascript
js 函数调用模式小结
2011/12/26 Javascript
js如何获取兄弟、父类等节点
2014/01/06 Javascript
jquery.post用法之type设置问题
2014/02/24 Javascript
jquery的父子兄弟节点查找示例代码
2014/03/03 Javascript
jQuery $.extend()用法总结
2014/06/15 Javascript
node.js中使用socket.io的方法
2014/12/15 Javascript
jquery滚动特效集锦
2015/06/03 Javascript
node.js 动态执行脚本
2016/06/02 Javascript
javascript实现非常简单的小数取整功能示例
2017/06/13 Javascript
微信小程序定位当前城市的方法
2018/07/19 Javascript
Vue CLI3中使用compass normalize的方法
2019/05/30 Javascript
微信小程序全局变量的设置、使用、修改过程解析
2019/09/24 Javascript
详解如何在JS代码中消灭for循环
2019/12/11 Javascript
python使用any判断一个对象是否为空的方法
2014/11/19 Python
使用Python的Zato发送AMQP消息的教程
2015/04/16 Python
wxpython中自定义事件的实现与使用方法分析
2016/07/21 Python
在Linux命令行终端中使用python的简单方法(推荐)
2017/01/23 Python
python 比较2张图片的相似度的方法示例
2019/12/18 Python
HTML5之SVG 2D入门3—文本与图像及渲染文本介绍
2013/01/30 HTML / CSS
HTML5中form如何关闭自动完成功能的方法
2018/07/02 HTML / CSS
美国女孩服装购物网站:Justice
2017/03/04 全球购物
美国性感内衣店:Yandy
2018/06/12 全球购物
万宝龙英国官网:Montblanc手表、书写工具、皮革和珠宝
2018/10/16 全球购物
String s = new String(“xyz”);创建了几个String Object?
2015/08/05 面试题
我的五年职业生涯规划
2014/01/23 职场文书
党员转正申请报告
2015/05/15 职场文书
python 下划线的多种应用场景总结
2021/05/12 Python
html+css实现环绕倒影加载特效
2021/07/07 HTML / CSS
HTML基础详解(上)
2021/10/16 HTML / CSS
Ubuntu Server 安装Tomcat并配置systemctl
2022/04/28 Servers