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 — Llamar a un método estático y pasar los argumentos como matriz
Llama a una función o método definido por el usuario, dado por el parámetro
function
. Esta función debe ser llamada dentro del contexto de un método, no
se puede usar fuera de una clase.
Usa el Enlace estático
en tiempo de ejecución.
Todos los argumentos del método a llamar se pasan como valores,
y como matriz, similar a call_user_func_array().
function
La 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.
parameter
Un parámetro, reuniendo todos los parámetros del método en una matriz.
Nota:
Observe que los parámetros para forward_static_call_array() no son pasados por 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 resultado del ejemplo sería:
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());