php.net

(PHP 5 >= 5.3.0, PHP 7, PHP 8)

forward_static_call_arrayCall a static method and pass the arguments as array

Parameters

callback

The function or method to be called. This parameter may be an array, with the name of the class, and the method, or a string, with a function name.

args

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

Note:

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

Return Values

Returns the function result, or false on error.

Examples

Example #1 forward_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";
    }
?>

The above example will output:

B
B more,args
C other,args

See Also

2

nino dot skopac at gmail dot com

10 years ago

Regarding namespaces:
Be sure to include fully namespaced class path:
<?php
forward_static_call_array(
    array('NAMESPACE\CLASS_NAME', 'STATIC_METHOD'),
    $params
);

0

israfilov93 at gmal dot com

8 years ago

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());

Read the original on php.net ↗