Regarding namespaces:
Be sure to include fully namespaced class path:
<?php
forward_static_call_array(
array('NAMESPACE\CLASS_NAME', 'STATIC_METHOD'),
$params
);(PHP 5 >= 5.3.0, PHP 7, PHP 8)
forward_static_call_array — Call a static method and pass the arguments as array
Calls a user defined function or method given by the callback
parameter, with arguments passed as an array, similarly to
call_user_func_array().
When called from within a method context, it uses the
late static binding.
When called outside a class context, it behaves like
call_user_func_array(), without late static binding.
Note:
Unlike forward_static_call(), this function does not require an active class scope: calling forward_static_call() outside a class throws an Error, while this function does not.
callbackThe 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.
argsOne parameter, gathering all the method parameter in one array.
Note:
Note that the parameters for forward_static_call_array() are not passed by reference.
Returns the function result, or false on error.
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
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());