可能这是PHP的限制,但是可能以某种方式调用函数 - 并强制执行可选参数的'default'值 - 即使在函数调用中,也给出了可选参数(和== null
)?
也许更容易表明我的意思:
<?php
function funcWithOptParam($param1, $param2 = 'optional') {
print_r('param2: ' . $param2);
}
funcWithOptParam('something'); // this is the behaviour I want to reproduce
// this will result in 'param2: optional'
funcWithOptParam('something', null); // i want $param2 to be 'optional', not null
// this will result in 'param2: ' instead of 'param2: optional'
?>
现在,对此最简单的答案是“不要写null
然后” - 但在我的特殊情况下,我为array
调用获取参数function
,并且只能做这样:
<?php
funcWithOptParam($param[0], $param[1]);
?>
即使$param[1]
为null
,null
也会覆盖可选参数的默认值
我只看到一个解决方案 - 跳过可选参数,并按照以下方式执行:
<?php
function funcWithOptParam($something, $notOptional) {
if($notOptional === null) {
$notOptional = 'defaultvalue';
}
...
}
?>
但我想知道是否有另一种解决方案。 PHP中是否存在“真正的”null
值?这真的转化为“什么都没有”?像js中的undefined
答案 0 :(得分:3)
为什么不将整个数组作为函数参数传递? 你只需这样称呼它:
funcWithOptParams($params);
并像这样处理它:
function funcWithOptParams($params) {
if(!isset($params[1])) {
$params[1] = 'defaultvalue';
}
...
}
此方法使您可以仅传递要指定的参数,并在您不想指定的参数中使用默认值。作为奖励,您不必担心参数的顺序。
答案 1 :(得分:0)
您可以使用func_num_args&amp; func_get_args创建您想要的行为
function funcWithArbitraryNumParams(){
$args = array();
if(!empty(func_num_args)){
$args = func_get_args();
}
print_r($args);
}
答案 2 :(得分:0)
你可以获得默认值,但它相当难看......
$function = new ReflectionFunction('your_function_name');
foreach ($function->getParameters() as $param) {
echo 'Name: ' . $param->getName() . PHP_EOL;
if ($param->isOptional()) {
echo 'Default value: ' . $param->getDefaultValue() . PHP_EOL;
}
echo PHP_EOL;
}
您可以检查参数是否为NULL
,如果是,请将其替换为默认值。