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利用COM对象访问SQLServer、Access
Oct 09 PHP
PHP json格式和js json格式 js跨域调用实现代码
Sep 08 PHP
php中get_headers函数的作用及用法的详细介绍
Apr 27 PHP
php的sprintf函数的用法 控制浮点数格式
Feb 14 PHP
为PHP安装imagick时出现Cannot locate header file MagickWand.h错误的解决方法
Nov 03 PHP
浅谈php提交form表单
Jul 01 PHP
Linux系统下PHP-FPM的安装和配置教程
Aug 17 PHP
一个简单至极的PHP缓存类代码
Oct 23 PHP
php去除二维数组的重复项方法
Nov 03 PHP
初识ThinkPHP控制器
Apr 07 PHP
php中namespace及use用法分析
Dec 06 PHP
php 常用的系统函数
Feb 07 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
curl实现站外采集的方法和技巧
2014/01/31 PHP
PHP中__autoload和Smarty冲突的简单解决方法
2016/04/08 PHP
PHP环境搭建的详细步骤
2016/06/30 PHP
tp5实现微信小程序多图片上传到服务器功能
2018/07/16 PHP
使用git迁移Laravel项目至新开发环境的步骤详解
2020/04/06 PHP
jQuery 学习 几种常用方法
2009/06/11 Javascript
Jquery阻止事件冒泡 event.stopPropagation
2011/12/11 Javascript
js实现的仿新浪微博完美的时间组件升级版
2011/12/20 Javascript
自己实现string的substring方法 人民币小写转大写,数字反转,正则优化
2012/09/02 Javascript
基于JQuery模仿苹果桌面的Dock效果(初级版)
2012/10/15 Javascript
关于jQuery判断元素是否存在的问题示例探讨
2014/07/21 Javascript
PHP+jQuery+Ajax+Mysql如何实现发表心情功能
2015/08/06 Javascript
jquery实现LED广告牌旋转系统图片切换效果代码分享
2015/08/26 Javascript
创建基于Bootstrap的下拉菜单的DropDownList的JQuery插件
2016/06/02 Javascript
教你如何在Node.js中使用jQuery
2016/08/28 Javascript
vue做网页开场视频的实例代码
2017/10/20 Javascript
vue 下列表侧滑操作实例代码详解
2018/07/24 Javascript
原生js+ajax分页组件
2020/01/30 Javascript
JS实现点击掉落特效
2021/01/29 Javascript
[46:53]Secret vs Liquid 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
python DataFrame 修改列的顺序实例
2018/04/10 Python
Pandas中DataFrame的分组/分割/合并的实现
2019/07/16 Python
python Tcp协议发送和接收信息的例子
2019/07/22 Python
python中如何写类
2020/06/29 Python
Django windows使用Apache实现部署流程解析
2020/10/12 Python
Html5 实现微信分享及自定义内容的流程
2019/08/20 HTML / CSS
Html5与App的通讯方式详解
2019/10/24 HTML / CSS
植物选择:Botanic Choice
2017/02/15 全球购物
洲际酒店集团美国官网:IHG美国
2017/11/16 全球购物
美国在线眼镜店:GlassesShop
2018/11/15 全球购物
小学运动会表扬稿
2014/01/19 职场文书
升旗仪式主持词
2014/03/19 职场文书
2014年机关后勤工作总结
2014/12/16 职场文书
《观潮》教学反思
2016/02/17 职场文书
pytorch显存一直变大的解决方案
2021/04/08 Python
Golang ort 中的sortInts 方法
2022/04/24 Golang