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模板引擎SMARTY
Oct 09 PHP
如何在PHP中进行身份认证
Oct 09 PHP
基于MySQL分区性能的详细介绍
May 02 PHP
jQuery+PHP+ajax实现微博加载更多内容列表功能
Jun 27 PHP
PHP屏蔽过滤指定关键字的方法
Nov 03 PHP
php抓取网站图片并保存的实现方法
Oct 29 PHP
Yii快速入门经典教程
Dec 28 PHP
PHP简单实现正则匹配省市区的方法
Apr 13 PHP
PHP基于面向对象封装的分页类示例
Mar 15 PHP
解决laravel 出现ajax请求419(unknown status)的问题
Sep 03 PHP
php计数排序算法的实现代码(附四个实例代码)
Mar 31 PHP
TP框架实现上传一张图片和批量上传图片的方法分析
Apr 23 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实现jQuery扩展函数
2009/10/30 PHP
PHP树-不需要递归的实现方法
2016/06/21 PHP
use jscript List Installed Software
2007/06/11 Javascript
javascript Math.random()随机数函数
2009/11/04 Javascript
浏览器窗口大小变化时使用resize事件对框架不起作用的解决方法
2014/05/11 Javascript
chrome下img加载对height()的影响示例探讨
2014/05/26 Javascript
JS验证邮件地址格式方法小结
2015/12/01 Javascript
jQuery自定义图片缩放拖拽插件imageQ实现方法(附demo源码下载)
2016/05/27 Javascript
javascript js 操作数组 增删改查的简单实现
2016/06/20 Javascript
node网页分段渲染详解
2016/09/05 Javascript
javascript实现简单的ajax封装示例
2016/12/28 Javascript
JS正则表达式判断有效数实例代码
2017/03/13 Javascript
使用gulp搭建本地服务器并实现模拟ajax
2017/04/05 Javascript
基于BootStrap multiselect.js实现的下拉框联动效果
2017/07/28 Javascript
微信小程序之滚动视图容器的实现方法
2017/09/26 Javascript
EasyUI实现下拉框多选功能
2017/11/07 Javascript
javascript按顺序加载运行js方法
2017/12/01 Javascript
微信小程序实现笑脸评分功能
2018/11/03 Javascript
关于js陀螺仪的理解分析
2019/04/11 Javascript
Vue 指令实现按钮级别权限管理功能
2019/04/23 Javascript
Angular2使用SVG自定义图表(条形图、折线图)组件示例
2019/05/10 Javascript
Vue实现购物车详情页面的方法
2019/08/20 Javascript
[01:28]一分钟告诉你DOTA2 TI9不朽宝藏Ⅱ中有什么!
2019/07/09 DOTA
Python实现大文件排序的方法
2015/07/10 Python
Python入门教程之运算符与控制流
2016/08/17 Python
python+matplotlib实现礼盒柱状图实例代码
2018/01/16 Python
Python判断有效的数独算法示例
2019/02/23 Python
Java ExcutorService优雅关闭方式解析
2020/05/30 Python
Python学习之os模块及用法
2020/06/03 Python
anaconda安装pytorch1.7.1和torchvision0.8.2的方法(亲测可用)
2021/02/01 Python
采购主管的岗位职责
2013/12/17 职场文书
培训主管岗位职责
2014/02/01 职场文书
服装创业计划书范文
2014/02/05 职场文书
网络宣传方案
2014/03/15 职场文书
2015年招聘工作总结
2014/12/12 职场文书
OpenCV图像变换之傅里叶变换的一些应用
2021/07/26 Python