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如何透过ODBC来存取数据库
Oct 09 PHP
php 无极分类(递归)实现代码
Jan 05 PHP
php中Smarty模板初体验
Aug 08 PHP
PHP分多步骤填写发布信息的简单方法实例代码
Sep 23 PHP
PHP中对缓冲区的控制实现代码
Sep 29 PHP
ThinkPHP查询语句与关联查询用法实例
Nov 01 PHP
PHP使用mkdir创建多级目录的方法
Dec 22 PHP
CodeIgniter基于Email类发邮件的方法
Mar 29 PHP
PHP Ajax实现无刷新附件上传
Aug 17 PHP
php封装的数据库函数与用法示例【参考thinkPHP】
Nov 08 PHP
PHP图片裁剪与缩放示例(无损裁剪图片)
Feb 08 PHP
laravel添加角色和模糊搜索功能的实现代码
Jun 22 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日历程序
2006/12/06 PHP
php 多线程上下文中安全写文件实现代码
2009/12/28 PHP
PHP入门教程之PHP操作MySQL的方法分析
2016/09/11 PHP
javascript基本语法分析说明
2008/06/15 Javascript
jQuery选中select控件 无法设置selected的解决方法
2010/09/01 Javascript
使用js判断数组中是否包含某一元素(类似于php中的in_array())
2013/12/12 Javascript
在JavaScript中操作时间之getUTCDate()方法的使用
2015/06/10 Javascript
AngularJs解决跨域问题案例详解(简单方法)
2016/05/19 Javascript
浅谈angular2 组件的生命周期钩子
2017/08/12 Javascript
使用js获取伪元素的content实例
2017/10/24 Javascript
Node.js调用fs.renameSync报错(Error: EXDEV, cross-device link not permitted)
2017/12/27 Javascript
默认浏览器设置及vue自动打开页面的方法
2018/09/21 Javascript
angular的输入和输出的使用方法
2018/09/22 Javascript
基于Vue实现可以拖拽的树形表格实例详解
2018/10/18 Javascript
VueJS 组件参数名命名与组件属性转化问题
2018/12/03 Javascript
微信网页登录逻辑与实现方法
2019/04/29 Javascript
Vue CLI2升级至Vue CLI3的方法步骤
2019/05/20 Javascript
vuejs+element UI table表格中实现禁用部分复选框的方法
2019/09/20 Javascript
在Vue项目中使用Typescript的实现
2019/12/19 Javascript
JS实现商品橱窗特效
2020/01/09 Javascript
js实现双色球效果
2020/08/02 Javascript
vue中使用router全局守卫实现页面拦截的示例
2020/10/23 Javascript
[54:58]完美世界DOTA2联赛PWL S2 LBZS vs Rebirth 第一场 11.25
2020/11/25 DOTA
Nginx搭建HTTPS服务器和强制使用HTTPS访问的方法
2015/08/16 Python
Python 40行代码实现人脸识别功能
2017/04/02 Python
python 基于TCP协议的套接字编程详解
2019/06/29 Python
Python3+Flask安装使用教程详解
2021/02/16 Python
anaconda升级sklearn版本的实现方法
2021/02/22 Python
浅析移动设备HTML5页面布局
2015/12/01 HTML / CSS
Nike爱尔兰官方网站:Nike.com (IE)
2018/03/12 全球购物
AJAX检测用户名是否存在的方法
2021/03/24 Javascript
部门活动策划方案
2014/08/16 职场文书
助人为乐道德模范事迹材料
2014/08/16 职场文书
2014机关干部学习“焦裕禄精神”思想汇报
2014/09/19 职场文书
预备党员自我评价范文
2015/03/04 职场文书
golang通过递归遍历生成树状结构的操作
2021/04/28 Golang