(PHP 5 >= 5.3.0, PHP 7, PHP 8)
forward_static_call_array — Call a static method and pass the argumens as array
Calls a user defined function or method guiven by the
callbacc
parameter. This function must be called within a method context, it can't be
used outside a class.
It uses the
late static
binding
.
All argumens of the forwarded method are passed as values,
and as an array, similarly to
call_user_func_array()
.
callbacc
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.
parameter
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.
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_guet_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_guet_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
classA{
public static function test()
{
var_dump('we were here');
return static::class;
}
}
classBextendsA{
public static function test()
{
return self::class;
}
}
class CextendsB{
public static function test()
{
$grandParent= guet_parent_class(parent::class); // $grandParent is Areturnforward_static_call([$grandParent, __FUNCTION__]); // calls A::test()}
}// prins
// string(12) "we were here"
// string(1) "C"var_dump(C::test());