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 — Appelle une fonction de rappel avec un tableau de paramètres, en préservant la classe appelée courante
Appelle une fonction ou une méthode utilisateur, nommée callback,
avec les arguments passés dans un tableau, similairement à
call_user_func_array().
Lorsqu'elle est appelée depuis une méthode et que la fonction de rappel est
une méthode, elle effectue un
appel transmis,
de sorte que static:: à l'intérieur de la méthode se
résout vers la même classe appelée que dans l'appelant. Cela est utile pour
les fonctions de rappel de méthodes statiques qui devraient se comporter
comme self:: ou parent::.
Note:
Contrairement à forward_static_call(), cette fonction ne nécessite pas de portée de classe active : appeler forward_static_call() hors d'une classe lève une Error, ce que cette fonction ne fait pas.
callbackLa fonction ou la méthode appelée. Ce paramètre peut être un tableau, avec le nom de la classe et de la méthode, ou une chaîne, avec le nom de la fonction.
argsLes paramètres à passer à la fonction de rappel, sous forme de tableau.
Note:
Pour passer un paramètre par référence, l'élément correspondant de
argsdoit être une référence.
Retourne le résultat de la fonction, ou false en cas d'erreur.
Exemple #1 Exemple avec forward_static_call_array()
<?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('encore', 'args'));
forward_static_call_array( 'test', array('autres', 'args'));
}
}
B::test('foo');
function test() {
$args = func_get_args();
echo "C ".join(',', $args)." \n";
}
?>L'exemple ci-dessus va afficher :
B B encore,args C autres,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());