zoukankan      html  css  js  c++  java
  • 理解 is_callable

    官方解释:


     

    (PHP 4 >= 4.0.6, PHP 5, PHP 7)

    is_callable — 检测参数是否为合法的可调用结构。

     

    说明 

    is_callable ( callable $name [, bool $syntax_only = false [, string &$callable_name ]] ) : bool
    

      

    验证变量的内容能否作为函数调用。 这可以检查包含有效函数名的变量,或者一个数组(包含了正确编码的对象以及函数名,即称为对象数组)。

     

    参数 

    name

    要检查的回调函数。

    syntax_only

    如果设置为 TRUE,这个函数仅仅验证 name 可能是函数或方法。 它仅仅拒绝非字符,或者未包含能用于回调函数的有效结构。有效的应该包含两个元素,第一个是一个对象或者字符,第二个元素是个字符。

    callable_name

    接受“可调用的名称”。下面的例子是“someClass::someMethod”。 注意,尽管 someClass::SomeMethod() 的含义是可调用的静态方法,但例子的情况并不是这样的。

    返回值 

      如果 name 可调用则返回 TRUE,否则返回 FALSE

     

    例子说明:


     

    怎么真正理解第二个参数,syntax_only。例子说明,如下:

     

    例1.

    判断一个已定义的函数,判断一个函数名的字符串

    function f(){}
    
    //f为函数名 var_dump(is_callable('f', false)); // bool(true) var_dump(is_callable('f', true)); // bool(true)

      

     总结:判断一个已定义的函数时,通过函数名判断即可,不管第二个参数为 true ,还是false, is_callable返回值都为true.

     

    例2.

     只检测格式,不检测具体内容

    //第2个参数为false,如果第一个参数是字符串,则需要检测函数是否存在
    var_dump(is_callable('不是方法名的字符串', false)); // bool(false)
    //第2个参数为true,只检测格式(字符串或者数组)即可,不检测内容是否真的存在,或者可被调用
    var_dump(is_callable('不是方法名的字符串', true)); // bool(true)

    //第2个参数为false,如果第一个参数是数组,则需要检测数组是否是可调用的对象数组
    var_dump(is_callable( array('随便写,不是对象', '随便写,不是对象的方法名'), false));  //  bool(false)

    //第2个参数为true,只检测格式(字符串或者数组)即可,不检测内容是否真的存在,或者可被调用
    var_dump(is_callable( array('随便写,不是对象', '随便写,不是对象的方法名'), true)); // bool(true)

      

    这里直接判断一个普通的字符串(非函数名),可以看见第二个参数的不同,返回的结果也不同。当第2个参数设置为true时,只要参数1是可能被调用的结构即可(字符串,或者数组),is_callable就返回true.

    总结:第2个参数为true时,不会去检查是否字串对应的函数是否真的存在,或者 数组对应的对象数组格式是否真的存在,而是检查只要是字符串格式(函数名),或者 数组格式(数组对象)即可,也就是只是检查是否是满足条件的格式

    简单来说,就是第二个参数为true时,只检查格式,不检测内容(是否真的存在,是否真的可被调用)

    例3.

    严格检测具体内容,第2个参数设置为false

    function f(){}
    
    class someClass {
    
      function someMethod() 
      {
      }
    
    }
    
    $anObject = new someClass();
    
    //普通字符串(非函数名)格式
    var_dump(is_callable('不是方法名的字符串', false));  //  bool(false)
    
    //函数名字符串
    var_dump(is_callable('f', false));  //  bool(true)
    
    //数组格式
    var_dump(is_callable( array('随便写,不是对象', '随便写,不是对象的方法名'), false));  //  bool(false)
    
    //类名-方法数组格式
    var_dump(is_callable( array('someClass', 'someMethod'), false));  //  bool(true)
    
    //对象-方法数组格式
    var_dump(is_callable( array($anObject, 'someMethod'), false));  //  bool(true)
    

      

    总结:第2个参数设置为false,默认值为false,不光要检测格式,还要检测内容是否真的存在,真的可被作为回调调用。

     

  • 相关阅读:
    MVC3 的路由Test
    表连接
    Moq MVC 初窥门径(一)
    FATAL ERROR: JS Allocation failed process out of memory
    版本号的意义
    JavaScript 类型的隐式转换
    翻译foreach语句
    一次http请求的全过程(附mmap文件下载)
    AOP学习笔记
    Kindle3之中文乱码问题
  • 原文地址:https://www.cnblogs.com/echojson/p/10905228.html
Copyright © 2011-2022 走看看