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木马攻击防御之道
Mar 24 PHP
PHP 将图片按创建时间进行分类存储的实现代码
Jan 05 PHP
PHP Memcached应用实现代码
Feb 08 PHP
php array_filter除去数组中的空字符元素
Jun 21 PHP
PHP+jQuery 注册模块开发详解
Oct 14 PHP
php将12小时制转换成24小时制的方法
Mar 31 PHP
PHP读取大文件末尾N行的高效方法推荐
Jun 03 PHP
php自定义函数实现汉字转换utf8编码的方法
Sep 29 PHP
基于php实现的验证码小程序
Dec 13 PHP
PHP中error_reporting函数用法详细介绍
Jun 11 PHP
laravel实现Auth认证,登录、注册后的页面回跳方法
Sep 30 PHP
微信小程序结合ThinkPHP5授权登陆后获取手机号
Nov 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桌面中心(一) 创建数据库
2007/03/11 PHP
PHP基于imap获取邮件实例
2014/11/11 PHP
PHP使用json_encode函数时不转义中文的解决方法
2014/11/12 PHP
php简单实现批量上传图片的方法
2016/05/09 PHP
php过滤htmlspecialchars() 函数实现把预定义的字符转换为 HTML 实体用法分析
2019/06/25 PHP
基于laravel Request的所有方法详解
2019/09/29 PHP
php设计模式之职责链模式实例分析【星际争霸游戏案例】
2020/03/27 PHP
Jquery 学习笔记(一)
2009/10/13 Javascript
jQuery插件jRumble实现网页元素抖动
2015/06/05 Javascript
JavaScript对象数组排序函数及六个用法
2015/12/23 Javascript
JS传递对象数组为参数给后端,后端获取的实例代码
2016/06/28 Javascript
一次$.getJSON不执行的简单记录
2016/07/19 Javascript
Listloading.js移动端上拉下拉刷新组件
2016/08/04 Javascript
Javascript数组中push方法用法分析
2016/10/31 Javascript
Vue结合SignalR实现前后端实时消息同步
2017/09/19 Javascript
垃圾回收器的相关知识点总结
2018/05/13 Javascript
vue项目中使用百度地图的方法
2018/06/08 Javascript
详解js静态检查工具eslint配置文件
2018/11/23 Javascript
Windows下支持自动更新的Electron应用脚手架的方法
2018/12/24 Javascript
浅谈Webpack4 Tree Shaking 终极优化指南
2019/11/18 Javascript
vue Treeselect下拉树只能选择第N级元素实现代码
2020/08/31 Javascript
Python下的subprocess模块的入门指引
2015/04/16 Python
Python中property属性实例解析
2018/02/10 Python
Python BS4库的安装与使用详解
2018/08/08 Python
pyhanlp安装介绍和简单应用
2019/02/22 Python
关于Python中的向量相加和numpy中的向量相加效率对比
2019/08/26 Python
解决tensorflow添加ptb库的问题
2020/02/10 Python
Django+Celery实现动态配置定时任务的方法示例
2020/05/26 Python
佳能德国网上商店:Canon德国
2017/03/18 全球购物
欧洲最大的球衣网上商店:Kitbag
2017/11/11 全球购物
线程同步的方法
2016/11/23 面试题
教师职称自我鉴定
2014/02/12 职场文书
教师见习期自我鉴定
2014/04/28 职场文书
css3实现的加载动画效果
2021/04/07 HTML / CSS
python中%格式表达式实例用法
2021/06/18 Python
Ruby序列化和持久化存储 Marshal和Pstore介绍
2022/04/18 Ruby