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