zoukankan      html  css  js  c++  java
  • 判断某个方法是否存在,解析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");
    复制代码

    结果显示如图:

    那么 如果把test类中的a方法改成私有的 或者是 受保护的 将会是什么样的结果呢?

    代码如图:

    结果如图:

    好了我们再来看一下 method_exists()这个函数:

     

    结果:

    到这里结论不用讲也应该清楚了吧?

    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

  • 相关阅读:
    redis发布订阅
    redis学习笔记(面试题)
    redis安全 (error) NOAUTH Authentication required
    HDU3001 Travelling —— 状压DP(三进制)
    POJ3616 Milking Time —— DP
    POJ3186 Treats for the Cows —— DP
    HDU1074 Doing Homework —— 状压DP
    POJ1661 Help Jimmy —— DP
    HDU1260 Tickets —— DP
    HDU1176 免费馅饼 —— DP
  • 原文地址:https://www.cnblogs.com/beili/p/9285029.html
Copyright © 2011-2022 走看看