PHP中的call_user_func()与call_user_func_array()简单理解
程序员文章站
2022-04-28 10:50:32
call_user_func:把一个参数作为回调函数调用
用法说明:
```php
call_user_func ( callable $callback [, mixed $parameter [, mixed $... ]] ) : mixed
```
参数说明:
第一个参数$callbac... ......
原文地址:
call_user_func:把一个参数作为回调函数调用
用法说明:
call_user_func ( callable $callback [, mixed $parameter [, mixed $... ]] ) : mixed
参数说明:
第一个参数$callback作为回调函数,其它参数都是回调函数的参数。
$parameter:传入回调$callback函数的参数,这里的参数注意不能引用传递。
下面简单例子分别说明了在不同情况下使用call_user_func:
//先引用,后执行
function _call($call){
echo $call++.'<br/>';
echo $call++.'<br/>';
return $call;
}
$rs = call_user_func('_call',1);
var_dump($rs);
//结果
//1
//2
//int(3)
先执行,后引用
$arg = 1;
call_user_func(function ($call){
echo ++$call.'<br/>';
echo ++$call.'<br/>';
},$arg);
//结果为2,3
回调函数不传值,通过func_get_arg和func_get_args获取参数
$argone = 1;
$argtwo = 2;
call_user_func(function (){
//获取第几个参数
$arg = func_get_arg(0);
var_dump($arg);
echo '<br/>';
//获取所有的参数,并以数组的形式返回
$args = func_get_args();
var_dump($args);
//获取参数个数
$argnum = func_num_args();
echo "<br/>";
var_dump($argnum);
},$argone,$argtwo);
//结果为
int(1)
array(2) { [0]=> int(1) [1]=> int(2) }
int(2)
调用类方法:
调用类中的静态方法有两种形式,而调用public方法第一个参数只能为数组
class func{
static public function _one(){
$str = "the class name is".__class__." and class static method is ".__method__;
$argnum = func_num_args();
if($argnum){
$arg = func_get_arg(0);
return $str.' and argument is '.$arg;
}else{
return $str;
}
}
public function _two($num){
return $num ? $num + 1 : $num;
}
}
echo "<br/>";
//调用类的静态方法
var_dump(call_user_func('func::_one','one'));
echo '<br/>';
var_dump(call_user_func(['func','_one']));
$num = 4;
$o = new func;
//调用类普通方法
$return = call_user_func(array($o,'_two'),$num);
echo '<br/>';
var_dump($return);
结果:
string(79) "the class name isfunc and class static method is func::_one and argument is one"
string(59) "the class name isfunc and class static method is func::_one"
int(5)
调用有命名空间的类时call_user_func的用法与上面的同理
//调用静态方法
call_user_func(array(__namespace__.'\staticdemo','_one'),100);
call_user_func('app\staticdemo::_one',200);
//调用public方法
call_user_func(array($obj,'_two'),2,3,4);
最后:
和call_user_func函数类似的还有call_user_func_array,call_user_func_array的作用和call_user_func的作用一样,
不同的是call_user_func用回调函数处理字符,而call_user_func_array用回调处理数组,也就是说call_user_func_array的参数二只能为数组。
推荐阅读
-
php中钩子(hook)的原理与简单应用demo示例
-
PHP call_user_func和call_user_func_array函数的简单理解与应用分析
-
PHP 回调函数call_user_func和 call_user_func_array()的理解
-
PHP中的call_user_func()与call_user_func_array()简单理解
-
HTML5中的Web Storage(sessionStorage||localStorage)理解与简单实例
-
简单理解JavaScript中的封装与继承特性
-
关于PHP中协程和阻塞的一些理解与思考
-
关于ASP.NET MVC中Form Authentication与Windows Authentication的简单理解
-
php中钩子(hook)的原理与简单应用demo示例
-
深入理解php中ob_flush与flush的区别