在露比

def my_func(foo,bar,*zim)
  [foo, bar, zim].collect(&:inspect)
end

puts my_func(1,2,3,4,5)

# 1
# 2
# [3, 4, 5]

在PHP(5.3)中
function my_func($foo, $bar, ... ){
  #...
}

在php中最好的方法是什么?

最佳答案

尝试
func_get_args-返回包含函数参数列表的数组
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
 */

希望能有所帮助。

07-27 13:49