想知道是否可以进行像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"
}

我问的原因是,我需要验证作为数组传递给RPC函数的这些args实际上是否已填充。而且似乎最好是具体说明内容,而不是希望它们以正确的顺序传递:
// Now
if (array_key_exists(0, $args)) {

// Preferred
if (array_key_exists('arg1', $args)) {

在传递给RPC之前,我很容易从传递给原始函数的args创建一个assoc数组,但是我只是想知道是否已经有一个编译好的函数可以为我做。

谢谢。

- 编辑 -

抱歉,我忘记提及我正在触摸的代码已经存在,这意味着我无法更改函数签名。

最佳答案

您可以在函数的开头使用 get_defined_vars ,以便它仅包含传递的(和定义的)参数:

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 不同,后者还将包含传递但未定义的函数参数。同样,默认参数也不是func_get_args的一部分,但是get_defined_vars自然会将其具有默认值。

关于php - 强制func_get_args()的结果成为一个关联数组,而不是0-index,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9199548/

10-10 18:02
查看更多