Вызвать статическую функцию с аргументами, которые не имеют аргументов, успешно выполнить

Привет я работаю с forward_static_call_array() Функция, я получил пример.

<?php

class A
{
const NAME = 'A';
public static function test() {
$args = func_get_args();
echo static::NAME, " ".join(',', $args)."<br/>";
}
}

class B extends A
{
const NAME = 'B';

public static function test() {
echo self::NAME, "<br/>";
forward_static_call_array(array('A', 'test'), array('more', 'args'));
forward_static_call_array( 'test', array('other', 'args'));
}
}

B::test("bar");

function test() {
$args = func_get_args();
echo "C ".join(',', $args)."<br/>";
}

?>

Здесь результат

B
B more,args
C other,args

Но когда я посмотрел на код, я увидел, что он вызывает B::test("bar"); другой 2 test() функции имеют func_get_args(), Но B::test его тоже нет. Поэтому я думаю, что должно появиться сообщение об ошибке. Но это работает нормально.

Как так?

  • поэтому, когда мы используем forward_static_call_array() внутри функции не обязательно иметь аргументы в функции?

или же

  • Статические функции PHP без каких-либо аргументов могут быть вызваны с аргументами?

Пожалуйста, объясните это. Большое спасибо .

0

Решение

С помощью forward_static_call_array не особенный. Каждая функция или метод имеет такое поведение.

PHP имеет поддержку списков аргументов переменной длины в пользовательских
функции. Это реализовано с использованием … токена в PHP 5.6 и
позже, и используя func_num_args (), func_get_arg () и
func_get_args () работает в PHP 5.5 и более ранних версиях.

function sum() {
$acc = 0;
foreach (func_get_args() as $n) {
$acc += $n;
}
return $acc;
}

echo sum(1, 2, 3, 4);

http://php.net/manual/en/functions.arguments.php#functions.variable-arg-list

http://php.net/manual/en/functions.arguments.php#functions.variable-arg-list.old

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]