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 méthode statique et passe les arguments en tableau
Appelle une fonction ou une méthode utilisateur, nommée callback
,
avec les arguments rassemblés dans un tableau. Cette fonction doit être appelée depuis
une méthode, et ne peut pas être utilisée hors d'une classe.
Elle utilise le liage statique.
Tous les arguments transmis sont passés par valeur dans un tableau, similairement à
call_user_func_array().
callback
La 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.
parameter
Un paramètre, rassemblant tous les paramètres dans un tableau.
Note:
Notez que les paramètres sont passés par valeur par forward_static_call_array().
Retourne le résultat de la fonction, et 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());