菜鸟笔记,这段时间优化代码。碰到了很多
if(){
$this->funcA();
}
if(){
$this->funcB();
}
if(){
$this->funcC();
}
的情况,思考如何能够优化这类代码。发现funcA-C 其实每个都可以做成callback,然后使用
call_user_func_array() 进行调用。
多说无用,先来个动态调用普通函数demo。
<?php
//call_user_func_array 的用法
class A
{
public function A(Request $req) {
$funs = array(
'_funcA',
'_funcB',
'_funcC',
'_funcD',
'_funcE'
);
call_user_func_array(array($this,$funs[$req->type]),array('A','B'));
}
private function _funcA($req = ''){
}
private function _funcB($req){
}
private function _funcC($req){
}
private function _funcD($req){
}
private function _funcE($req){
}
}
注意:
1.先做一个映射表,然后通过映射表 key=>value value就是对应的函数名。这样可以直接调用。
2.调用的是回调函数,一定要分清谁是回,谁是调。
3.也可以配合func_get_args()函数接收参数到数组中。
其实完全可以把call_user_func_array() 的第一个参数传递函数名称, 动态调用函数,通过不同的参数请求,分发到不同的普通执行函数。
以上的内容是在代码迭代中所思考和编写的,后来查看了官方对call_user_func_array()的解释,发现参数完全可以用引用的方式进行使用,官方的demo如下:
function &foo(&$a){
return
$a;
}
$b = 2;
$c =& call_user_func_array('foo', array(&$b));
$c++;
echo
$b . ' ' . $c;
?>
官方上对于这个函数的使用有更多的解释与理解,目前还在不断的消化中,发现更好的地方可以继续补充文档。
网友评论