PHP:这种语法可以用于调用带参数的函数吗?

时间:2009-09-15 19:49:18

标签: php

我想知道是否有任何语法问题调用一个只有一个带多个参数的参数的函数。例如:

function foobar( $biff ) {
// do stuff...
}

...然后调用函数:

echo foobar( 'Hello', 'world', '!!!' )

我相信$biff === 'Hello',对吧?

然后我会使用array_slice( func_get_args(), 1 );来玩args 'world''!!!'

这是对的还是不推荐这个?

P.S。我在函数包装器中工作,它包含许多其他包含各种参数的函数。

6 个答案:

答案 0 :(得分:1)

这个想法应该有效,而且它完全有效:它被称为Variable-length argument lists;并且它不是“正确”或“错误”。

如果你需要它,那么,使用它; - )

使用func_get_arg的方式存在一个小问题:您无法将其用作函数参数 - 请参阅手册页底部的注释。


我在这种想法中看到的问题是你不会在你的IDE中暗示 - 在编写代码时这不是很好: - (

所以我只会在真正需要的时候使用它(即,当你真的不知道你需要多少参数时),即使它工作正常。


如果您知道可能参数的最大数量,则另一个选项是使用default / optionnal parameters

答案 1 :(得分:0)

更好的方法是定义所有预期的参数,并使可选参数具有默认值:

function foo($a, $b = '', $c = 1) { ... }

这样可以更明显地为函数提供什么参数。

答案 2 :(得分:0)

您的array_slice方法仅适用于较新的php版本(自5.3起)

否则你的代码很好,但为什么不把所有三个参数都放在函数原型中呢?

答案 3 :(得分:0)

PHP: func_get_args

  

注意:因为此函数取决于当前范围来确定参数详细信息,所以它不能用作函数参数。如果必须传递此值,则应将结果分配给变量,并且应传递该变量。

答案 4 :(得分:0)

我想这会奏效。 PHP有一个描述其工作原理的页面,列出了所有可变参数args相关的函数,并有一些例子:http://php.net/manual/en/functions.arguments.php#functions.variable-arg-list

答案 5 :(得分:0)

它会起作用,但正如@Pascal Martin所说,在操作变量之前将func_get_arg返回的参数赋值给变量。要在IDE中获得一些代码帮助,您只需使用PhpDoc表示法:

/**
 * This function takes $biff and does yadayadayada. Additionally, more arguments 
 * can be passed in and will be used to ...
 * @param string $biff This argument will ...
 * @param string [$foo] Optional. Any number of arguments can be passed in and ..
 * @return string The return value of this function is $biff and any other 
 * parameters ...
 */
function foobar( $biff ) {
// do stuff...
}

这个表示法将为您提供Eclipse PDT,Zend Studio以及其他一些人的代码帮助。