call_user_func与call_user_func_array

call_user_func是PHP的内置函数,该函数允许用户调用直接写的函数并传入一定的参数

call_user_func_array是个很神奇的函数,在你PHP水平成长到一定高度的时候,你就能深刻理解它的意义了。这里我给你举两个适合用call_user_func_array的例子,帮助你理解
场景一:参数数目不确定
函数的参数是用户传入的,而且参数的数目不确定。如果不用call_user_func_array你会怎么做?一些PHP框架可以将$_GET参数自动映射到方法,就是这样实现的。
场景二:用于函数回调
回调函数可能是一个普通函数,可能是类方法,也可能是静态方法。如果使用call_user_func_array,你就不用去判断方法的类型。
追问
首先感谢你!
普通方法和静态方法, 都可以通过 类名::方法名调用啊 ,只不过普通方法貌似很少这么干的?
参数不确定 ,php不是有func_get_args()方法可以接受全部的参数数组吗?
回答

这是一个设计上的问题。func_get_args是可以实现,但这就要求编写函数的用户有要实现更多的逻辑。

如果你是一个框架的设计者,你要用户自己写func_get_args,自己写参数处理的过程吗?

有时这个函数是来自某个类库的,难道你要修改源码么?


给你一个回调函数的例子,如果不用call_user_func_array要写多少代码?

1
2
3
4
5
6
7
<?php
function  call_func(callback){
     return  call_user_func_array(callback,  array (1,2));
}
call_func( array ( $obj 'method' ));
call_func( array ( 'classname' 'method' ));
call_func( 'simple_function' );
提问者评价
膜拜!看来早点看框架底层的东西就好了,多吸收别人的精华代码真是受益匪浅,再次感谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值