PHP不能使用多个三元运算符?

时间:2015-01-27 17:59:43

标签: php html html5

基本上我有以下代码:

<a href="<?php echo (!$isLoggedIn && !isset($_COOKIE['access_token'])) ? "connect.php" : isset($_GET['autoooooo']) ? "main.php?auto=true" :""?>"></a>

但是,当我var_dump $isLoggedIn$isset($_COOKIE['access_token'])都是假的时(通过<?php?>中的!它会变为真)并且href应该是connect.php ...但它总是main.php?auto=true"autoooooo甚至不存在(我只是为测试而做)而且href实际上应该是空的。

我做错了什么?

2 个答案:

答案 0 :(得分:1)

在php中,三元运算符(?:)从左到右关联(与C或perl不同,它从右到左关联)。

这意味着它会评估第一个test ? value 1 : value 2,然后使用该结果来确定要使用的第二个运算符的值。

您的构造可以在C或perl中工作,但在php中,您需要在每个后续的三元运算符周围添加括号。

另外,为了便于阅读,我建议您在代码中添加相当多的换行符和缩进。

答案 1 :(得分:0)

使用第2段的括号:

$b1 = false;
$b2 = false;
echo $b1 ? 'b1 true' : ($b2 ? 'b2 true' : 'all false') ;

输出:

all false