php函数如何不传值?

我有一个函数test,我想在没有获取到$b的时候就不传参,请问该怎么写判断?我不能改变test的代码,所有?$b=2就不需要说了

function test($a = 1, $b = 2) {
    return $a * $b;
}

$a = $_GET['a'];
$b = $_GET['b'] ?? null;

//在不改变test的情况下,我如何判断$b是否传参
return test($a);

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 18

调用 test 之前判断一下?

2年前 评论

反射

2年前 评论
勇敢的心 (楼主) 2年前
╰ゝSakura

详情见代码,强烈推荐方案②的写法
ps:说实在,有点无法理解。按我理解,你的要求其实就是不传的时候,使用默认值2,那为啥不传$b的话,为啥不将不传$b时的默认值跟test方法的$b的默认值搞一致就好了,搞个null默认值,有点不懂。代码是给人看的,怎么简单怎么来,没必要搞那么多花里胡哨(非杠精,纯粹发表看法)

方案①

function test($a = 1, $b = 2) {
    return $a * $b;
}

$a = $_GET['a'];
$b = $_GET['b'] ?? null;

return is_null($b) ? test($a) : test($a, $b);

方案②

function test($a = 1, $b = 2) {
    return $a * $b;
}

$a = $_GET['a'];
$b = $_GET['b'] ?? 2;

return test($a, $b);

方案③

const DEFAULT_B = 2;
function test($a = 1, $b = DEFAULT_B) {
    return $a * $b;
}

$a = $_GET['a'];
$b = $_GET['b'] ?? DEFAULT_B;

return test($a, $b);
2年前 评论
勇敢的心 (楼主) 2年前
勇敢的心 (楼主) 2年前
╰ゝSakura (作者) 2年前
勇敢的心 (楼主) 2年前
╰ゝSakura (作者) 2年前
PHP布道者 2年前

func_num_args()

2年前 评论
天意 (作者) 2年前

升级 php8 你的问题迎刃而解。 Named Parameter

Laravel

这简直就是为你需求而生的

2年前 评论
Buffett-Cai
$a = 1;
$b = null;
$array[] = $a;
if ($b) {
$array[] = $b;
}
call_user_func_array('test',$array)
2年前 评论

认真看了你的问题,差点给我整不会了。

function test($a = 1, $b = 2) {
    return $a * $b;
}

$a = $_GET['a'];
$b = $_GET['b'] ?? null;


if ($b){
    return test($a,$b);
} else {
    return test($a);
}
2年前 评论

没太明白,自己传没传还不知道吗

2年前 评论
勇敢的心 (楼主) 2年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!