美文网首页
php call_user_func_array()用法

php call_user_func_array()用法

作者: 落雨听蝉i | 来源:发表于2018-11-08 10:55 被阅读0次

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

    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; 

    ?>

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


    相关文章

      网友评论

          本文标题:php call_user_func_array()用法

          本文链接:https://www.haomeiwen.com/subject/egvixqtx.html