• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • ReflectionFunction::invokeArgs()

    (PHP 5 >= 5.1.2, PHP 7)

    Invokes function args

    说明

    publicReflectionFunction::invokeArgs(array $args): mixed

    Invokes the function and pass its arguments as array.

    参数

    $args

    The passed arguments to the function as an array, much likecall_user_func_array()works.

    返回值

    Returns the result of the invoked function

    范例

    Example #1ReflectionFunction::invokeArgs()example

    <?php
    function title($title, $name)
    {
        return sprintf("%s. %s\r\n", $title, $name);
    }
    $function = new ReflectionFunction('title');
    echo $function->invokeArgs(array('Dr', 'Phil'));
    ?>
    

    以上例程会输出:

    Dr. Phil
    

    Example #2ReflectionFunction::invokeArgs()with references example

    <?php
    function get_false_conditions(array $conditions, array &$false_conditions)
    {
        foreach ($conditions as $condition) {
            if (!$condition) {
                $false_conditions[] = $condition;
            }
        }
    }
    $function_ref     = new ReflectionFunction('get_false_conditions');
    $conditions       = array(true, false, -1, 0, 1);
    $false_conditions = array();
    $function_ref->invokeArgs(array($conditions, &$false_conditions));
    var_dump($false_conditions);
    ?>
    

    以上例程会输出:

    array(2) {
      [0]=>
      bool(false)
      [1]=>
      int(0)
    }
    

    注释

    Note:

    如果函数有参数需为引用,那么它们必须以引用方式传入。

    参见

    • ReflectionFunction::invoke() Invokes function
    • ReflectionFunctionAbstract::getNumberOfParameters() 获取参数数目
    • __invoke()
    • call_user_func_array() 调用回调函数,并把一个数组参数作为回调函数的参数
    In the case of call_user_func_array(), if you were to pass around an anonymous function and reference $this within the anonymous function, $this will faithfully refer to the class in the context in which the function was defined. Using ReflectionFunction::invokeArgs() does not seem to retain its original context--yeah, even if you bind the anonymous function before invoking. I recommend call_user_func_array() where context is a concern.
    I encountered a weird problem with ReflectionFunction, described in ticket 44139 of PHP Bugs.
    If for some reason you need to call with invoke, or invokeArgs, a function like array_unshift (that accepts internally the array by reference) you could use this code to avoid the generated warning or fatal error.
    <?php
    function unshift(){
      $ref    = new ReflectionFunction('array_unshift');
      $arguments  = func_get_args();
      return    $ref->invokeArgs(array_merge(array(&$this->arr), $arguments));
    }
    ?>
    I don't know about performances (you can create an array manually too, starting from array(&$this->something) and adding arguments). However, it seems to work correctly without problems, at least until the send by reference will be usable with one single value ...