奇怪的三元运算符

时间:2013-03-04 15:41:49

标签: php

<?php echo (isset($var)) ?: $var; ?>

这种语法是否正确?如果不设置$ var,空字符串或null,这将显示什么?可以使用它吗?

7 个答案:

答案 0 :(得分:2)

此:

<?php echo (isset($var)) ?: $var; ?>

做同样的事情:

<?php
 if (isset($var)) {
  // do nothing
 } else {
  echo $var;
 }
?>

所以你试图显示变量,如果它是空/ null / etc ...

如果功能:

<?php $k= (cond ? do_if_true : do_if_false); ?>

$k可以是新变量echo等。
cond - isset$z==$y

答案 1 :(得分:1)

语法正确,用法不正确。在这里说:

$var = something();
echo $var ?: 'false';

这相当于:

$var = something();
if ($var) {
    echo $var;
} else {
    echo 'false';
}

$var ? $var : 'false'的简写。

您的示例毫无意义,因为如果isset($var) 设置为,则输出true$var)的结果,否则为$var

您需要echo isset($var) ? $var : nullif (isset($var)) echo $var,并且没有捷径。

答案 2 :(得分:0)

代码没有意义,生成通知或回显1,你不能打印未设置的$ var

答案 3 :(得分:0)

语法很好。

如果设置了$ var,那么它将输出,如果不是,它将抛出关于未设置的$ var的回显的通知。

如果你的error_reporting设置为E_NONE,那么你只会看到一个白色的屏幕,如果设置了$ var,那么你将看到$ var

的值

答案 4 :(得分:0)

这将以任何方式回显$ var。

  

从PHP 5.3开始,可以省略中间部分   三元运算符。表达式expr1?:expr3如果expr1则返回expr1   计算结果为TRUE,否则为expr3。

因此,如果设置了$ var,它会回显$ var(因为它的计算结果为TRUE),如果它没有设置为任何值或计算结果为false,则手动要求它回显$ var。

理想情况下你想要:

(condition  ?  if_true_then_do_this : if_false_then_do_this)

以简写形式变为

   (condition ? ? false)

既然你在两个地方都指定了$ var,那么无论如何都会得到$ var。你想要这个:

echo ($var?:"null");

答案 5 :(得分:0)

不,这种语法不正确 在回显时,所有变量必须设置为且格式正确
否则意味着开发人员不知道他们的变量来自何处以及它们包含什么 - 直接注入的道路。

所以,正确的语法是

<?=$var?>

至于三元 - 我不喜欢它们。

答案 6 :(得分:0)

<?php (isset($var)) ? echo "" : echo $var; ?>

你可以使用这个。