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

PHP: Is this syntax okay for calling a function with arguments?

提问人:Jeff 提问时间:9/16/2009 更新时间:9/16/2009 访问量:164

问:

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

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

...然后调用函数:

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

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

然后我将使用 args 和 .array_slice( func_get_args(), 1 );'world''!!!'

这是对的还是不推荐的?

P.S. 我正在一个函数包装器中工作,它包含许多其他包含不同数量参数的函数。

PHP的

评论


答:

0赞 Jani Hartikainen 9/16/2009 #1

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

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

这样一来,可以为函数提供哪些参数就更加明显了。

评论

0赞 Jeff 9/16/2009
不幸的是,这是不可能的。我正在函数包装器中工作。
0赞 knittl 9/16/2009 #2

您的方法仅适用于较新的 PHP 版本(从 5.3 开始)array_slice

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

评论

0赞 Jeff 9/16/2009
我现在让它在 5.2 上运行。主要关注是否可以使用仅请求一个参数的函数调用额外的参数。
0赞 knittl 9/16/2009
至少 php.net 页面说它只从 5.3 开始工作。使用额外的参数调用并没有什么坏处,但正如其他人所说:你的 IDE 中不会有代码补全等等
1赞 Pascal MARTIN 9/16/2009 #3

这个想法应该有效,而且它是完全有效的:它被称为可变长度参数列表;它既不是“”也不是“”。

如果你需要它,好吧,使用它;-)

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


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

因此,我只会在真正必要时使用它(即,当您真的不知道需要多少参数时),即使它工作正常。


如果您知道可能参数的 mamimum 数量,另一种选择是使用默认/可选参数

0赞 Marko 9/16/2009 #4

PHP:func_get_args

注意:由于此函数依赖于当前作用域来确定参数详细信息,因此不能用作函数参数。如果必须传递此值,则应将结果分配给变量,并且应传递该变量。

0赞 poundifdef 9/16/2009 #5

我想这会起作用的。PHP 有一个页面描述了它是如何工作的,列出了所有与可变参数相关的函数,并有一些示例: http://php.net/manual/en/functions.arguments.php#functions.variable-arg-list

0赞 PatrikAkerstrand 9/16/2009 #6

它会起作用,但正如 @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 和其他一些代码的帮助。