PHP 8.1.31 Released!

forward_static_call_array

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

forward_static_call_arrayChama um método estático e passa os argumentos como array

Descrição

forward_static_call_array(callable $callback, array $args): mixed

Chama uma função ou método definido pelo usuário fornecido pelo parâmetro callback. Esta função deve ser chamada dentro de um contexto de método, não pode ser usada fora de uma classe. Ela usa a ligação estática tardia. Todos os argumentos do método encaminhado são passados ​​como valores e como um array, de forma semelhante a call_user_func_array().

Parâmetros

callback

A função ou método a ser chamado. Este parâmetro pode ser um array, com o nome da classe e do método, ou uma string, com um nome de função.

parameter

Um parâmetro, reunindo todos os parâmetros do método em um array.

Nota:

Observe que os parâmetros para forward_static_call_array() não são passados ​​por referência.

Valor Retornado

Retorna o resultado da função ou false em caso de erro.

Exemplos

Exemplo #1 Exemplo de 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('mais', 'argumentos'));
forward_static_call_array( 'test', array('outros', 'argumentos'));
}
}

B::test('foo');

function
test() {
$args = func_get_args();
echo
"C ".join(',', $args)." \n";
}

?>

O exemplo acima produzirá:

B
B mais,argumentos
C outros,argumentos

Veja Também

adicione uma nota

Notas Enviadas por Usuários (em inglês) 2 notes

up
2
nino dot skopac at gmail dot com
8 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
6 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