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 相关文章推荐
支持oicq头像的留言簿(二)
Oct 09 PHP
CakePHP去除默认显示的标题及图标的方法
Oct 22 PHP
php 处理上百万条的数据库如何提高处理查询速度
Feb 08 PHP
php实现图片添加水印功能
Feb 13 PHP
模板引擎smarty工作原理以及使用示例
May 25 PHP
PHP使用Alexa API获取网站的Alexa排名例子
Jun 12 PHP
php模拟服务器实现autoindex效果的方法
Mar 10 PHP
php微信开发之带参数二维码的使用
Aug 03 PHP
PHPExcel中文帮助手册|PHPExcel使用方法(分享)
Jun 09 PHP
Thinkphp5.0框架视图view的循环标签用法示例
Oct 12 PHP
如何在Laravel之外使用illuminate组件详解
Sep 20 PHP
PHP获取php,mysql,apche的版本信息及更多服务器信息
Mar 09 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初学者头疼十四条问题大总结
2008/11/12 PHP
Laravel框架使用Seeder实现自动填充数据功能
2018/06/13 PHP
Laravel 自动生成验证的实例讲解:login / logout
2019/10/14 PHP
如何用javascript判断录入的日期是否合法
2007/01/08 Javascript
jQuery入门知识简介
2010/03/04 Javascript
深入理解JavaScript系列(15) 函数(Functions)
2012/04/12 Javascript
你的 mixin 真的兼容 ECMAScript 5 吗?
2013/04/11 Javascript
js加载之使用DOM方法动态加载Javascript文件
2013/11/08 Javascript
jQuery实现批量判断表单中文本框非空的方法(2种方法)
2015/12/09 Javascript
JavaScript中的this机制
2016/01/30 Javascript
Node.js服务器环境下使用Mock.js拦截AJAX请求的教程
2016/05/23 Javascript
js 获取当前web应用的上下文路径实现方法
2016/08/19 Javascript
JavaScript数组迭代方法
2017/03/03 Javascript
js绑定事件和解绑事件
2017/04/27 Javascript
浅谈React 服务器端渲染的使用
2018/05/08 Javascript
深入理解react-router 路由的实现原理
2018/09/26 Javascript
js中call()和apply()改变指针问题的讲解
2019/01/17 Javascript
Vue实现一种简单的无限循环滚动动画的示例
2021/01/10 Vue.js
[20:39]DOTA2-DPC中国联赛 正赛开幕式 1月18日
2021/03/11 DOTA
Python基于有道实现英汉字典功能
2015/07/25 Python
Python使用遗传算法解决最大流问题
2018/01/29 Python
caffe binaryproto 与 npy相互转换的实例讲解
2018/07/09 Python
Pandas GroupBy对象 索引与迭代方法
2018/11/16 Python
PyQt5实现QLineEdit添加clicked信号的方法
2019/06/25 Python
做一个能自适应高度的textarea的示例代码
2019/09/06 HTML / CSS
荷兰之家英文站:Holland at Home
2016/10/26 全球购物
Solid & Striped官网:美国泳装品牌
2019/06/19 全球购物
沃尔玛加拿大:Walmart.ca
2020/03/02 全球购物
教师自荐信
2013/12/10 职场文书
投标承诺书怎么写
2014/05/24 职场文书
婚庆公司计划书
2014/09/15 职场文书
2014年手术室工作总结
2014/11/26 职场文书
2019大学竞选班长发言稿
2019/06/27 职场文书
再见,2019我们不负使命;你好,2020我们砥砺前行
2020/01/03 职场文书
Python爬虫之自动爬取某车之家各车销售数据
2021/06/02 Python
ubuntu端向日葵键盘输入卡顿问题及解决
2022/12/24 Servers