PHP 8.6.0 Beta 1 is available for testing

forward_static_call_array

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

forward_static_call_arrayВызов статического метода и передача параметров в виде массива

Описание

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

Вызывает пользовательскую функцию или метод, заданные в параметре callback. Эта функция должна вызываться в контексте метода и не может быть вызвана вне класса. Она использует позднее статическое связывание. Все аргументы пересылаются в метод по значению и в виде массива, аналогично call_user_func_array() .

Список параметров

callback

Функция или метод для вызова. Этот параметр может быть массивом с именем класса и метода, либо строкой с именем функции.

args

Массив, содержащий все аргументы вызова функции.

Замечание:

Помните, что аргументы forward_static_call_array() не передаются по ссылке.

Возвращаемые значения

Возвращает результат функции или false в случае возникновения ошибки.

Примеры

Пример #1 Пример использования 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('more', 'args'));
 forward_static_call_array( 'test', array('other', 'args'));
 }
}
B::test('foo');
function test() {
 $args = func_get_args();
 echo "C ".join(',', $args)." \n";
 }
?>

Результат выполнения приведённого примера:

B
B more,args
C other,args

Смотрите также

  • forward_static_call() - Вызов статического метода
  • call_user_func() - Вызывает callback-функцию
  • call_user_func_array() - Вызывает callback-функцию с массивом параметров
  • is_callable() - Проверяет, доступно ли значение для вызова как функция в текущей области видимости

Нашли ошибку?

ИнструкцияИсправлениеСообщение об ошибке
+Добавить

Примечания пользователей 2 notes

up
2
nino dot skopac at gmail dot com
10 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
8 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());
+Добавить

AltStyle によって変換されたページ (->オリジナル) /