如何在嵌套调用中使用默认参数值?

时间:2015-05-15 10:19:38

标签: php function arguments default-value

我遇到这种情况:函数a(一个类方法,但这并不重要,这里......)调用函数b
函数a有一个参数(例如$p2),其中默认值。
函数b有一个参数(例如$q2),默认值。

如果函数a被称为而没有参数$p2,则函数b应该被称为而不是参数{{1也是,使用它的默认值强制它 如果函数$q2被称为 参数a,则函数$p2应该被称为参数b

通过示例清除:

$q2

当然可以使用测试,如上例所示,但它看起来是一个非常难看的解决方案......问题是:

是否有更好(更快,更清洁,更智能)的代码来实现这个用例?

2 个答案:

答案 0 :(得分:1)

我认为这样的事情应该是你正在寻找的东西:

只需使用func_get_args()获取所有函数参数,然后只需使用call_user_func_array()调用下一个函数。

function a($p1, $p2 = "default value") {
    call_user_func_array("b", func_get_args());
}

答案 1 :(得分:0)

函数a默认参数必须与函数b默认参数具有相同的值:

function a($p1, $p2 = null) {
    b($p1, $p2);
}

function b($p1, $p2 = null) {
    var_dump($p1, $p2);
}

因此,使用这两个参数调用a会将这些参数传递给函数b,而仅使用第一个参数集调用函数a将首先从用户调用b和第二个参数作为默认值:

  

a(2,5); // - > (int)2(int)5

     

A(2); // - > (int)2 NULL

<强> [UPDATE]

如果函数可以具有不同的默认值,则需要检测默认值:

function a($p1, $p2 = null) {
    $p2 = !is_null($p2) ? $p2 : 'defaultB';

    b($p1, $p2); // For string use `stricmp($p2, 'defaultA') !== 0`
}

function b($p1, $p2 = 'defaultB');