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 相关文章推荐
56.com视频采集接口程序(PHP)
Sep 22 PHP
php获取url字符串截取路径的文件名和扩展名的函数
Jan 22 PHP
php 无限级分类学习参考之对ecshop无限级分类的解析 带详细注释
Mar 23 PHP
php根据分类合并数组的方法实例详解
Nov 06 PHP
Win2003+apache+PHP+SqlServer2008 配置生产环境
Jul 29 PHP
php实现的css文件背景图片下载器代码
Nov 11 PHP
php实现兼容2038年后Unix时间戳转换函数
Mar 18 PHP
分享微信扫码支付开发遇到问题及解决方案-附Ecshop微信支付插件
Aug 23 PHP
ubuntu下配置nginx+php+mysql详解
Sep 10 PHP
解决Yii2邮件发送结果返回成功,但接收不到邮件的问题
May 23 PHP
PHP根据树的前序遍历和中序遍历构造树并输出后序遍历的方法
Nov 10 PHP
浅谈php://filter的妙用
Mar 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
全国FM电台频率大全 - 16 河南省
2020/03/11 无线电
如何正确理解PHP的错误信息
2006/10/09 PHP
PHP 网络开发详解之远程文件包含漏洞
2010/04/25 PHP
用sql命令修改数据表中的一个字段为非空(not null)的语句
2010/06/04 PHP
PHP获取不了React Native Fecth参数的解决办法
2016/08/26 PHP
Yii2中hasOne、hasMany及多对多关联查询的用法详解
2017/02/15 PHP
Span元素的width属性无效果原因及解决方案
2010/01/15 Javascript
JavaScript DOM 学习第三章 内容表格
2010/02/19 Javascript
jQuery .attr()和.removeAttr()方法操作元素属性示例
2013/07/16 Javascript
JavaScript中判断整字类型最简洁的实现方法
2014/11/08 Javascript
JavaScript中的方法调用详细介绍
2014/12/30 Javascript
调试JavaScript中正则表达式中遇到的问题
2015/01/27 Javascript
JavaScript通过function定义对象并给对象添加toString()方法实例分析
2015/03/23 Javascript
javascript显示系统当前时间代码
2016/12/29 Javascript
Angularjs使用指令做表单校验的方法
2017/03/31 Javascript
jquery实现图片上传前本地预览
2017/04/28 jQuery
JS限制输入框输入的实现代码
2018/07/02 Javascript
vue路由分文件拆分管理详解
2020/08/13 Javascript
[04:52]第二届DOTA2亚洲邀请赛主赛事第一天比赛集锦:OG娜迦海妖放大配合谜团大中3人
2017/04/02 DOTA
[01:00:59]VP VS VG Supermajor小组赛胜者组第二轮 BO3第二场 6.2
2018/06/03 DOTA
python 容器总结整理
2017/04/04 Python
Python数据存储之 h5py详解
2019/12/26 Python
基于python实现查询ip地址来源
2020/06/02 Python
中国电子产品外贸网站:MiniIntheBox
2017/02/06 全球购物
一道Delphi面试题
2016/10/28 面试题
毕业生怎样写好自荐信
2013/11/11 职场文书
教师校本培训方案
2014/02/26 职场文书
师德师风自查材料
2014/10/14 职场文书
公务员考察材料范文
2014/12/23 职场文书
写给导师的自荐信
2015/03/06 职场文书
中标通知书范本
2015/04/17 职场文书
三十年再续同学情倡议书
2019/11/27 职场文书
使用pandas模块实现数据的标准化操作
2021/05/14 Python
安装pytorch时报sslerror错误的解决方案
2021/05/17 Python
浅谈Python数学建模之线性规划
2021/06/23 Python
MySQL的Query Cache图文详解
2021/07/01 MySQL