Попробуйте
func_get_args
- Возвращает массив, содержащий список аргументов функции
PHP-версия вашего Ruby Snippet
function my_func($foo, $bar)
{
$arguments = func_get_args();
return array(
array_shift($arguments),
array_shift($arguments),
$arguments
);
}
print_r( my_func(1,2,3,4,5,6) );
или просто
function my_func($foo, $bar)
{
return array($foo , $bar , array_slice(func_get_args(), 2));
}
дает
Array
(
[0] => 1
[1] => 2
[2] => Array
(
[0] => 3
[1] => 4
[2] => 5
[3] => 6
)
)
Обратите внимание, что func_get_args()
вернет все аргументы, переданные функции, а не только те, которые не указаны в сигнатуре. Также обратите внимание, что любые аргументы, которые вы определяете в подписи, считаются обязательными, и PHP выдаст предупреждение, если их нет.
Если вы хотите получить только оставшиеся аргументы и определить, что во время выполнения вы можете использовать ReflectionFunction API для считывания количества аргументов в сигнатуре и array_slice
полный список аргументов, содержащий только дополнительные аргументы, например
function my_func($foo, $bar)
{
$rf = new ReflectionFunction(__FUNCTION__);
$splat = array_slice(func_get_args(), $rf->getNumberOfParameters());
return array($foo, $bar, $splat);
}
Почему кто-то хотел бы, чтобы просто с помощью func_get_args()
я не знал, но это сработает. Более простым является доступ к аргументам любым из следующих способов:
echo $foo;
echo func_get_arg(0); // same as $foo
$arguments = func_get_args();
echo $arguments[0]; // same as $foo too
Если вам нужно документировать аргументы переменных функций, PHPDoc предлагает использовать
/**
* @param Mixed $foo Required
* @param Mixed $bar Required
* @param Mixed, ... Optional Unlimited variable number of arguments
* @return Array
*/
Надеюсь, это поможет.