想知道是否可以像func_get_args()
(reference)那样进行调用,而不是产生0索引数组,导致关联数组,使用变量名作为键?
例如:
function foo($arg1, $arg2)
{
var_dump(func_get_args());
}
foo('bar1', 'bar2');
// Output
array(2) {
[0]=>
string(4) "bar1"
[1]=>
string(4) "bar2"
}
// Preferred
array(2) {
[arg1]=>
string(4) "bar1"
[arg2]=>
string(4) "bar2"
}
我问的原因是,我需要验证这些作为数组传递给arql函数的args是否实际填充。而且似乎最好是具体内容而不是希望它们以正确的顺序传递:
// Now
if (array_key_exists(0, $args)) {
// Preferred
if (array_key_exists('arg1', $args)) {
在传递给RPC之前,我很容易从传入原始函数的args创建一个assoc数组,但只是想知道是否有一个已经编译过的函数为我做了。
感谢。
- 编辑 -
抱歉,我忘了提到我触摸的代码已经存在,这意味着我无法更改功能签名。
答案 0 :(得分:16)
您可以在函数的最开头使用get_defined_vars
Docs,使其仅包含传递的(和已定义的)参数:
function foo($arg1, $arg2)
{
var_dump(get_defined_vars());
}
foo('bar1', 'bar2');
输出(Demo):
array(2) {
["arg1"]=>
string(4) "bar1"
["arg2"]=>
string(4) "bar2"
}
如果您在函数内部使用静态或全局变量,请在调用get_defined_vars
之后指定,例如:
function foo($arg1, $arg2)
{
$passed = get_defined_vars();
static $staticVariable = 0;
global $staticVariable;
...
}
注意这与func_get_args
Docs不同,{{3}}也包含已传递但未定义的函数参数。默认参数也不是func_get_args
的一部分,但自然get_defined_vars
将使用默认参数。
答案 1 :(得分:5)
你应该要求参数本身不是参数,而是一个关联数组:
public function yourMethod(array $args = array()) {
if (array_key_exists('foo', $args)) {
// foo
}
// ...
}
$obj->yourMethod(array(
'foo' => 'foo value',
'bar' => 'bar value'
));