0

我试图在 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都会为我删除的每个参数打印。为什么要这样做?我在这里做错了什么?

4

1 回答 1

1

由于您省略了三元的第二部分(如果测试语句返回,应该打印什么true),三元语句返回测试表达式的计算结果。然后打印出该结果。

当您省略路由中的最后一个参数时,测试表达式的结果为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/>";
});

现在脚本知道如果其中一个表达式返回 true 应该做什么empty()——打印一个空字符串。

于 2013-09-15T13:58:20.493 回答