带有数组默认参数的嵌套函数调用

时间:2019-12-03 13:15:55

标签: php

我要实现的目标:当不带任何参数调用test()时,我希望使用默认参数调用nested()函数。

UPD:要求:

  • 没有从nested()函数复制粘贴的默认参数值
  • 可以覆盖$arr参数值
  • UPD:函数test()具有多个参数(在这种情况下,... func_get_args()无效)
  • 实际上,这是简化的问题。想象一下,有几个类具有类似test()方法的类,它们的默认$arr参数调用了其他类的nested()方法。我想实现当使用默认参数调用nested()方法时使用默认参数调用test()方法。

有可能吗?

<?php

function test(int $i = 0, array $arr = null)
{
  nested($arr);
}

function nested(array $arr = [1,2,3])
{
   var_dump($arr);
}

test();
test(5, [4,5,6]);

2 个答案:

答案 0 :(得分:2)

您可以将$arrargument unpackingfunc_get_args())传递给实际的参数,而不是传递...到嵌套函数中

function test(array $arr = null)
{
    nested(...func_get_args());
}

function nested(array $arr = [1,2,3])
{
    var_dump($arr);
}

test();

如果希望它与更复杂的参数设置一起使用,则可以查看传递的参数数量(func_num_args()),在这种情况下,请检查是否少于2个参数,以及有,然后强制不带任何参数的呼叫。您可以检查是否有更复杂的模式$arrnull,但是如果用户通过null ...

function test(int $i = 0, array $arr = null)
{
    if ( func_num_args() < 2 )  {
        nested();
    }
    else    {
        nested($arr);
    }
}

答案 1 :(得分:1)

检查数组是否为空

function test(array $arr = null)
{
  if (empty($arr)) {nested();}else{nested($arr);}
}

function nested(array $arr = [1,2,3])
{
   var_dump($arr);
}

test();