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


PHP can't take more than one ternary operator?

基本上我有以下代码:

<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实际上应该是空的。

我做错了什么?

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

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

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

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

为第二句使用括号:

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

输出:

all false