• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • forward_static_call_array()

    (PHP 5 >= 5.3.0, PHP 7)

    Call a static method and pass the arguments as array

    说明

    forward_static_call_array(callable $function,array $parameters): mixed

    Calls a user defined function or method given by the$functionparameter. This function must be called within a method context, it can't be used outside a class. It uses thelate static binding. All arguments of the forwarded method are passed as values, and as an array, similarly tocall_user_func_array().

    参数

    $function

    The function or method to be called. This parameter may be anarray, with the name of the class, and the method, or astring, with a function name.

    $parameter

    One parameter, gathering all the method parameter in one array.

    Note:

    Note that the parameters forforward_static_call_array()are not passed by reference.

    返回值

    Returns the function result,orFALSEon error.

    范例

    Example #1forward_static_call_array()example

    <?php
    class A
    {
        const NAME = 'A';
        public static function test() {
            $args = func_get_args();
            echo static::NAME, " ".join(',', $args)." \n";
        }
    }
    class B extends A
    {
        const NAME = 'B';
        public static function test() {
            echo self::NAME, "\n";
            forward_static_call_array(array('A', 'test'), array('more', 'args'));
            forward_static_call_array( 'test', array('other', 'args'));
        }
    }
    B::test('foo');
    function test() {
            $args = func_get_args();
            echo "C ".join(',', $args)." \n";
        }
    ?>
    

    以上例程会输出:

    B
    B more,args 
    C other,args
    

    参见

    Regarding namespaces:
    Be sure to include fully namespaced class path:
    <?php
    forward_static_call_array(
      array('NAMESPACE\CLASS_NAME', 'STATIC_METHOD'),
      $params
    );
    one of academic example, when forward_static_call() can be useful
    <?php
    class A
    {
      public static function test()
      {
        var_dump('we were here');
        return static::class;
      }
    }
    class B extends A
    {
      public static function test()
      {
        return self::class;
      }
    }
    class C extends B
    {
      public static function test()
      {
        $grandParent = get_parent_class(parent::class); // $grandParent is A
        return forward_static_call([$grandParent, __FUNCTION__]); // calls A::test()
      }
    }
    // prints 
    // string(12) "we were here"
    // string(1) "C"
    var_dump(C::test());