PHP 8.3.4 Released!

forward_static_call_array

(PHP 5 >= 5.3.0, PHP 7, PHP 8)

forward_static_call_arrayLlamar a un método estático y pasar los argumentos como matriz

Descripción

forward_static_call_array(callable $function, array $parameters): mixed

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().

Parámetros

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.

Valores devueltos

Devuelve el resultado de la función, o false en caso de error.

Ejemplos

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

Ver también

add a note

User Contributed Notes 2 notes

up
2
nino dot skopac at gmail dot com
7 years ago
Regarding namespaces:

Be sure to include fully namespaced class path:

<?php
forward_static_call_array
(
array(
'NAMESPACE\CLASS_NAME', 'STATIC_METHOD'),
$params
);
up
0
israfilov93 at gmal dot com
5 years ago
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());
To Top