是否可以在PHP函数中计算缺少的参数?我想这样做:
// I have this
function foo($param1, $param2, $param3) {
// I need some sort of argument counter
}
foo("hello", "world");
当我使用上面的foo函数时,我想找到一种方法来找出并非所有参数都被使用。
通过计算所有参数并与get_defined_vars()进行比较,或者使用一个函数来计算缺少参数的数量。
编辑: 如果在启用error_reporting时缺少某些参数,我需要该方法停止运行。
if(!foo($param)) { echo "Couldn't Foo!"; }
答案 0 :(得分:3)
答案 1 :(得分:2)
如果你想做这个超级动态的,使用反射来获得预期的参数计数,并将该数字与func_num_args()返回的数字进行比较:
function foo($p1 = null, $p2 = null, $p3 = null) {
$refl = new ReflectionFunction(__FUNCTION__);
$actualNumArgs = func_num_args();
$expectedNumArgs = $refl->getNumberOfParameters();
$numMissingArgs = $expectedNumArgs - $actualNumArgs;
// ...
答案 2 :(得分:1)
调用参数不足的函数会引发错误。如果需要允许调用带有较少参数的函数,则需要在函数声明中使用默认值定义它们,并测试默认值以查看哪些已被省略。
这样的事情(再次提出):
function foo () {
// Names of possible function arguments
// This replaces the list of arguments in the function definition parenthesis
$argList = array('param1', 'param2', 'param3');
// Actual function arguments
$args = func_get_args();
// The number of omitted arguments
$omittedArgs = 0;
// Loop the list of expected arguments
for ($i = 0; isset($argList[$i]); $i++) {
if (!isset($args[$i])) { // The argument was omitted - this also allows you to skip arguments with NULL since NULL is not counted as set
// increment the counter and create a NULL variable in the local scope
$omittedArgs++;
${$argList[$i]} = NULL;
} else {
// The argument was passed, create a variable in the local scope
${$argList[$i]} = $args[$i];
}
}
// Function code goes here
var_dump($omittedArgs);
}
这对于可能维护代码的其他人来说有点直觉 - 参数列表现在被维护为字符串数组而不是函数参数列表,但除此之外是完全动态的并且实现了你想要的。
答案 3 :(得分:0)
根据您的需要,最简单的解决方案可能是默认参数:
function foo($param1 = null, $param2 = null, $param3 = null) {
if ($param3 !== null) {
// 3 params are specified
} else if ($param2 !== null) {
// 2 params are specified
} else if ($param1 !== null) {
// 1 param is specified
} else {
// no param is specified
}
}
答案 4 :(得分:0)
您可以使用内置的php函数:
参数数组: http://php.net/manual/en/function.func-get-args.php