zoukankan      html  css  js  c++  java
  • PHP回调函数及匿名函数概念与用法详解

    1、回调函数

    PHP的回调函数其实和C、Java等语言的回调函数的作用是一模一样的,都是在主线程执行的过程中,突然跳去执行设置的回调函数;

    回调函数执行完毕之后,再回到主线程处理接下来的流程

    而在php调用回调函数,不想c以及java那样直接使用函数名作为函数参数,而是在php中使用函数对应的字符串名称执行

    1.1、无参数回调

    <?php
    //无参数回调
    function callback(){
      echo 'execute no parameters callback.<br/>';
    }
    function main($callback){
      echo 'execute main start.<br/>';
      $callback();
      echo 'execute main end.<br/>';
    }
    main('callback');
    //结果
    ecute main start.
    execute no parameters callback.
    execute main end.
    

    1.2、全局回调函数

    <?php
    //全局函数回调
    function callback($a,$b){
      echo "$a<====>$b.<br/>";
    }
    $func = 'callback';
    call_user_func($func, 1,2);
    call_user_func_array($func, array(1,2));
    //结果
    1<====>2.
    1<====>2.
    

    1.3、类方法及静态方法回调

    <?php
    class Test{
      //成员函数
      function callback($a,$b){
        echo "callback $a<====>$b.<br/>";
      }
      public static function staticCallback($a,$b){
        echo "staticCallback $a<====>$b.<br/>";
      }
    }
    //非静态方法调用方式一
    $test = new Test();
    call_user_func(array($test, 'callback'), 1,2);
    call_user_func_array(array($test, 'callback'), array(1,2));
    //非静态方法调用方式二
    $func = 'callback';
    $test->$func(7,9);
    //静态方法调用方式
    call_user_func(array('Test', 'staticCallback'), 4,6);
    call_user_func_array(array('Test', 'staticCallback'), array(4,6));
    call_user_func_array("Test::staticCallback", array(4,6));
    //结果
    callback 1<====>2.
    callback 1<====>2.
    callback 7<====>9.
    staticCallback 4<====>6.
    staticCallback 4<====>6.
    staticCallback 4<====>6.
    

    1.4 is_callable

    (PHP 4 >= 4.0.6, PHP 5)

    is_callable — 验证变量的内容是否能够进行函数调用

     

    Description

    bool is_callable ( callback $name [, bool $syntax_only = false [, string &$callable_name ]] )
     
    验证变量的内容是否能够进行函数调用。可以用于检查一个变量是否包含一个有效的函数名称,或者一个包含经过合适编码的函数和成员函数名的数组。

    Parameters(参数)

    name

    既可以是一个字符串类型的函数名称,也可以是一个对象和成员函数名的组合数组,比如:array($SomeOject, 'MethodName')

    syntax_only

    如果设置为true,那么只是验证name是一个函数或者方法,函数仅仅会拒绝不是字符串,亦或是结构不合法的数组作为回调函数。合法结构是指一个包含两个成员的数组,第一个是对象或者字符串,第二个是一个字符串。

    callable_name

    接收“调用名称”,在下面的例子里它是“someClass::someMethod"。请注意尽管someClass::someMethod()是一个可调用的静态方法,但是这里并不是真的表示一个静态方法

    Return Values(返回值)

    如果可调用返回true,否则返回false。

     

    Examples

    <?php
    function someFunction() 
    {
    }
    $functionVariable = 'someFunction';
    var_dump(is_callable($functionVariable, false, $callable_name));  // bool(true)
    echo $callable_name, "
    ";  // someFunction
    
    class someClass {
      function someMethod() 
      {
      }
    }
    
    $anObject=new someClass();
    $methodVariable=array($anObject,'someMethod');
    var_dump(is_callable($methodVariable,true,$callable_name));  //bool(true)
    echo $callable_name,
    "
    "; 
    //someClass::someMethod
    
    ?>
    

      

  • 相关阅读:
    第一台虚拟机联网
    情话
    03-Linux的shell命令 .doc
    Linux系统目录结构介绍
    href 里面 链接前面加/与不加的区别?(绝对路径与相对路径)
    本地仓库关联远程仓库,从远程仓库克隆代码
    HTml <meta>标签的使用(重要)
    JS中 submit提交与Form表单里的onsubmit的调用问题?
    JS中 confirm()方法的使用?
    表单数据校检方法 onsubmit()的使用?
  • 原文地址:https://www.cnblogs.com/Im-Victor/p/9295703.html
Copyright © 2011-2022 走看看