• PHP函数补完:call_user_func()


    UCenter源代码里有一个函数call_user_func,开始以为是自己定义的函数,结果到处都找不到。后来才知道call_user_func是PHP的内置函数,该函数允许用户调用直接写的函数并传入一定的参数,下面总结下这个函数的使用方法。

    call_user_func函数类似于一种特别的调用函数的方法,使用方法如下:

    01
    <?php

    02
    function nowamagic($a,$b

    03

    04
    echo $a

    05
    echo $b

    06

    07
    call_user_func('nowamagic', "111","222"); 

    08
    call_user_func('nowamagic', "333","444"); 

    09
    //显示 111 222 333 444 

    10
    ?>

    调用类内部的方法比较奇怪,居然用的是array,不知道开发者是如何考虑的,当然省去了new,也挺有新意的:

    01
    <?php

    02
    class a { 

    03
    function b($c

    04

    05
    echo $c

    06

    07

    08
    call_user_func(array("a", "b"),"111"); 

    09
    //显示 111 

    10
    ?> 

    call_user_func_array函数和call_user_func很相似,只不过是换了一种方式传递了参数,让参数的结构更清晰:

    1
    <?php

    2
    function a($b, $c

    3

    4
    echo $b

    5
    echo $c

    6

    7
    call_user_func_array('a', array("111", "222")); 

    8
    //显示 111 222 

    9
    ?>

    call_user_func_array函数也可以调用类内部的方法的:

    01
    <?php

    02
    Class ClassA 

    03

    04

    05
    function bc($b, $c) { 

    06
    $bc = $b + $c

    07
    echo $bc

    08

    09

    10
    call_user_func_array(array('ClassA','bc'), array("111", "222")); 

    11

    12
    //显示 333 

    13
    ?> 

    call_user_func函数和call_user_func_array函数都支持引用,这让他们和普通的函数调用更趋于功能一致:

    01
    <?php

    02
    function a($b

    03

    04
    $b++; 

    05

    06
    $c = 0; 

    07
    call_user_func('a', $c); 

    08
    echo $c;//显示 1 

    09
    call_user_func_array('a', array($c)); 

    10
    echo $c;//显示 2

    11
    ?>

    另外,call_user_func函数和call_user_func_array函数都支持引用。

    view source

    print?

    01
    <?php

    02
    function increment(&$var)

    03
    {

    04
    $var++;

    05
    }

    06
    $a = 0;

    07
    call_user_func('increment', $a);

    08
    echo $a; // 0

    09
    call_user_func_array('increment', array(&$a)); // You can use this instead

    10
    echo $a; // 1

    11
    ?>

     

    转自:http://www.nowamagic.net/librarys/veda/detail/1509

  • 相关阅读:
    (转)HTTP、TCP和HTTPS
    使用覆盖索引优化like查询
    Laravel 源码解析(一)
    redis 缓存策略注意的问题总结
    laravel 监听mysql操作 生成时间
    CommonJS, AMD, CMD 笔记
    php json_encode小数精度丢失的问题
    Python通过pandas操作excel常用功能
    Vmware 虚拟化技术
    磁盘中的esp分区与msr分区
  • 原文地址:https://www.cnblogs.com/phplearnings/p/3624652.html
Copyright © 2020-2023  润新知