假设我有一个带有以下签名的方法/函数:
foo($bar = 0)
在 foo 内,如何判断是否设置了 $ bar ? isset 将始终返回 TRUE ,因为 $ bar foo ,则会分配 0 。
检查0不是一个选项。我需要知道显式设置为0或默认为0的参数之间的区别。
答案 0 :(得分:14)
只需使用func_num_args()来专门检查传入的参数数量。
<?php
function foo($bar = 0)
{
echo "\nNumber of arguments: " . func_num_args();
}
// Outputs "Number of arguments: 1"
foo(0);
// Outputs "Number of arguments: 0"
foo();
?>
答案 1 :(得分:9)
您可以使用func_get_args
。例如:
function foo($optional=null) {
if (count(func_get_args()) > 0)
echo "optional given\n";
else
echo "optional not given\n";
}
foo(); //optional not given
foo(null); //optional given
请注意,用于内部PHP函数的约定是始终为可选参数提供默认值,并且在未给出两个参数且明确给出其默认值时使它们具有相同的行为。如果您发现其他情况,请提交错误报告。这让你在没有if
s的情况下做这样的事情:
function strpos_wrap($haystack, $needle, $offset = 0) {
return strpos($haystack, $needle, $offset);
}
这个约定更加强制是userland,因为导致你回答这个问题的难度已经向你展示了。如果公约不符合您的需求,至少重新考虑您的方法。 func_num_args
/ func_get_args
的目的主要是允许变量参数函数。