四种回调函数

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);

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

posted @ 2020-01-28 23:30  zpchcbd  阅读(596)  评论(0编辑  收藏  举报