gpt4 book ai didi

php - 有没有一种干净的方法将 undefined variable 用作PHP中的可选参数?

转载 作者:行者123 更新时间:2023-12-03 08:19:13 24 4
gpt4 key购买 nike

有没有什么好方法可以(可能)将 undefined variable (例如来自外部输入)用作可选的函数参数?

<?php
$a = 1;

function foo($a, $b=2){
//do stuff
echo $a, $b;
}

foo($a, $b); //notice $b is undefined, optional value does not get used.
//output: 1

//this is even worse as other erros are also suppressed
@foo($a, $b); //output: 1

//this also does not work since $b is now explicitly declared as "null" and therefore the default value does not get used
$b ??= null;
foo($a,$b); //output: 1

//very,very ugly hack, but working:
$r = new ReflectionFunction('foo');
$b = $r->getParameters()[1]->getDefaultValue(); //still would have to check if $b is already set
foo($a,$b); //output: 12

到目前为止,我能想到的唯一半有用的方法是不将默认值定义为参数,而是在实际函数内部,并使用“null”作为中介,如下所示:
<?php
function bar ($c, $d=null){
$d ??= 4;
echo $c,$d;
}

$c = 3
$d ??= null;
bar($c,$d); //output: 34

但是使用它我仍然必须检查两次参数:一次在调用函数之前是否已设置参数,一次在函数内部是否为null。

还有其他不错的解决方案吗?

最佳答案

理想情况下,在这种情况下,您不会传递$b。我不记得曾经遇到过不知道是否存在变量并将其传递给函数的情况:

foo($a);

但是要做到这一点,您需要确定如何调用该函数:
isset($b) ? foo($a, $b) : foo($a);

这有点骇人听闻,但是如果您仍然需要引用,它将被创建:
function foo($a, &$b){
$b = $b ?? 4;
var_dump($b);
}

$a = 1;
foo($a, $b);

关于php - 有没有一种干净的方法将 undefined variable 用作PHP中的可选参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61645514/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com