Привет я работаю с 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()
внутри функции не обязательно иметь аргументы в функции?или же
Пожалуйста, объясните это. Большое спасибо .
С помощью 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
Других решений пока нет …