我遇到这种情况:函数a
(一个类方法,但这并不重要,这里......)调用函数b
。
函数a
有一个参数(例如$p2
),其中默认值。
函数b
有一个参数(例如$q2
),默认值。
如果函数a
被称为而没有参数$p2
,则函数b
应该被称为而不是参数{{1也是,使用它的默认值强制它
如果函数$q2
被称为 参数a
,则函数$p2
应该被称为,参数b
。
通过示例清除:
$q2
当然可以使用测试,如上例所示,但它看起来是一个非常难看的解决方案......问题是:
是否有更好(更快,更清洁,更智能)的代码来实现这个用例?
答案 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');