我试图在Slim PHP中实现类似的功能:
页/ P1 / P2 / P3 / P4
我想要如果我从右边(显然)省略了参数,那么我想根据我收到的任何参数来做我的东西。
$app->get('/page(/)(:p1/?)(:p2/?)(:p3/?)(:p4/?)',
function ($p1 = null, $p2 = null, $p3 = null, $p4 = null) {
print empty($p1)? : '' . "p1: $p1/<br/>";
print empty($p2)? : '' . "p2: $p2/<br/>";
print empty($p3)? : '' . "p3: $p3/<br/>";
print empty($p4)? : '' . "id: $p4<br/>";
});
一切都按预期工作但问题是每当我从末尾删除一个参数时,它会为我删除的每个参数打印1
。
它为什么这样做?
我在这做错了什么?
答案 0 :(得分:1)
由于您省略了三元的第二部分(如果test语句返回true
,应该打印什么),则ternary语句返回测试表达式求值的内容。然后打印出该结果。
当您省略路线中的最后一个参数时,测试表达式会产生true
,但由于您未定义在这种情况下要执行的操作,因此会返回true
并1
打印出来。
请改为尝试:
$app->get('/page(/)(:p1/?)(:p2/?)(:p3/?)(:p4/?)',
function ($p1 = null, $p2 = null, $p3 = null, $p4 = null) {
print empty($p1)? "" : '' . "p1: $p1/<br/>";
print empty($p2)? "" : '' . "p2: $p2/<br/>";
print empty($p3)? "" : '' . "p3: $p3/<br/>";
print empty($p4)? "" : '' . "id: $p4<br/>";
});
现在脚本知道如果其中一个empty()
表达式返回true,该怎么做 - 打印一个空字符串。