基本上我有以下代码:
<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