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 — Llama a una función de devolución de llamada con una matriz de parámetros, preservando la clase llamada actual
Llama a una función o método definido por el usuario, dado por el parámetro
callback, con los argumentos pasados como matriz,
similar a call_user_func_array().
Cuando se llama dentro del contexto de un método y se llama a una función de
devolución de llamada de método, realiza una
llamada reenviada,
de modo que static:: dentro del método se resuelve a la
misma clase llamada que en el llamador. Esto es útil para funciones de
devolución de llamada de métodos estáticos que deberían comportarse como
self:: o parent::.
Nota:
A diferencia de forward_static_call(), esta función no requiere un ámbito de clase activo: llamar a forward_static_call() fuera de una clase lanza un Error, mientras que esta función no.
callbackLa función o método a ser llamado. Este parámetro puede ser un array, con el nombre de la clase y del método, o un string, con el nombre de una función.
argsLos parámetros a pasar a la función de devolución de llamada, como una matriz.
Nota:
Para pasar un parámetro por referencia, el elemento correspondiente en
argsdebe ser una referencia.
Devuelve el resultado de la función, o false en caso de error.
Ejemplo #1 Ejemplo de forward_static_call_array()
<?php
class A
{
const NOMBRE = 'A';
public static function prueba() {
$args = func_get_args();
echo static::NOMBRE, " ".join(',', $args)." \n";
}
}
class B extends A
{
const NOMBRE = 'B';
public static function prueba() {
echo self::NOMBRE, "\n";
forward_static_call_array(array('A', 'prueba'), array('más', 'args'));
forward_static_call_array( 'prueba', array('otro', 'args'));
}
}
B::prueba('foo');
function prueba() {
$args = func_get_args();
echo "C ".join(',', $args)." \n";
}
?>El ejemplo anterior mostrará:
B B más,args C otro,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());