试试
您的 Ruby 代码段的 PHP 版本
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 suggest to use
/**
* @param Mixed $foo Required
* @param Mixed $bar Required
* @param Mixed, ... Optional Unlimited variable number of arguments
* @return Array
*/
希望对您有所帮助。