基本上我有以下代码:
<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
实际上应该是空的。
我做错了什么?
答案 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