Есть ли хороший способ использовать (потенциально) неопределенные переменные (например, из внешнего ввода) в качестве необязательных параметров функции?
<?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
Но, используя это, мне все равно придется дважды проверить параметр: один раз, если он установлен перед вызовом функция и один раз, если она равна нулю внутри функции.
Есть еще какое-нибудь приятное решение?