zoukankan      html  css  js  c++  java
  • 四种回调函数

    1、call_user_func

    2、call_user_func_array

    3、array_map

    4、preg_replace_callback

    call_user_func和call_user_func_array是相类似的!

    先看call_user_func

    call_user_func( callable $callback [, mixed $parameter [, mixed $... ]] ) 把第一个参数 callback 是被调用的回调函数,其余参数是回调函数的参数

    <?php
    
    function myfunction($a,$b){
        echo $a . "-----" . $b;
    }
    
    call_user_func(myfunction,'i am one call_user_func','i am two call_user_func');
    

    然后再看call_user_func_array

    call_user_func_array( callable $callback , array $param_arr ) 把第一个参数作为回调函数(callback)调用,把参数数组作(param_arr)为回调函数的的参数传入

    <?php
    
    function myfunction($a,$b){
        echo $a . "-----" . $b;
    }
    
    call_user_func_array(myfunction,array("i am one call_user_func_array","i am two call_user_func_array")); 
    
    

    call_user_func_array不仅可以传函数,还可以调用类中的方法,但是有前提条件,该函数需要被定义为静态方法

    <?php
    
    class foo{
        public static function myfunction($a,$b){
            echo $a . '-----' . $b;
        }
    }
    
    call_user_func_array(array(foo,myfunction),array("i am one call_user_func_array","i am two call_user_func_array")); // 写法一
    call_user_func_array(["foo","myfunction"],array("i am one call_user_func_array","i am two call_user_func_array")); // 写法二
    call_user_func_array("foo::myfunction",array("i am one call_user_func_array","i am two call_user_func_array")); // 写法三
    call_user_func_array([new foo,'myfunction'],array("i am one call_user_func_array","i am two call_user_func_array")); //写法四, 这种写法 对象和方法必须通过数组形式传递
    

    接下来是 array_map

    <?php
    function cube($n){
       return($n * $n * $n);
    }
    
    $a = array(1, 2, 3, 4, 5);
    $b = array_map("cube", $a);
    print_r($b);
    ?>
    

    可以发现$a中的数组值被cube函数作为参数传进入然后返回值返回给了$b

    最后再来看下preg_replace_callback,定义如下

    preg_replace_callback - 执行一个正则表达式搜索并且使用一个回调进行替换

    <?php
    $text = "April fools day is 04/01/2002";
    
    function next_year($matches){
      return $matches[1].($matches[2]+1);
    }
    
    echo preg_replace_callback("#(d{2}/d{2}/)(d{4})#","next_year",$text);
    

    可以看出下面内容中的年份多加了一年,那么也可以把这个函数理解为 正则匹配出来的内容 作为形参,放进回调函数中进行处理在返回!

  • 相关阅读:
    Linux下安装Blender
    自我复制的3D打印机
    ODOO v10.0 自动生成财务凭证的科目设置
    初识Odoo的辅助核算
    Odoo9以后的社区版本和企业版功能上的区别
    06: linux中find查找命令总结
    02: shell中的if、case、for等语句
    01: shell基本使用
    05: 配置yum源
    04: linux基础总结-centos6.5
  • 原文地址:https://www.cnblogs.com/zpchcbd/p/12239360.html
Copyright © 2011-2022 走看看