php call_user_func_array()用法

2018-11-08  本文已影响0人  落雨听蝉i

菜鸟笔记,这段时间优化代码。碰到了很多

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; 

?>

官方上对于这个函数的使用有更多的解释与理解,目前还在不断的消化中,发现更好的地方可以继续补充文档。


上一篇下一篇

猜你喜欢

热点阅读