2

可以肯定的是,对此有一个简单的答案,但由于使用了模糊的术语,因此很难搜索。

我正在使用简写 if 语句并且想要在它返回 true 时执行多个操作,语法是什么样的?

例如,从逻辑上思考我尝试了类似的东西:

<?php

$var = "whatever";

(isset($var) ? $var2=$var; $var3=$var : $error="fubar");

?>

显然,这会以意想不到的方式停止;但希望你能明白我想要完成的事情。

很抱歉,如果这是一个重复的问题,我发誓我已经搜索过了。:)

谢谢!

编辑

我知道速记是否适合这种情况应该受到质疑。但是,能不能做到,还是个问题。

4

3 回答 3

10

是的,可以&&在每个作业之间使用:

(isset($var) ? ($var2=$var) && ($var3=$var) : $error="fubar");

在上面的代码中,如果$var设置了,$var2就会$var3得到相同的值,否则这两个变量不会改变。

也就是说,这不是最合适的方法。三元运算符应该用于简单的逻辑,当逻辑开始变得复杂时,三元很可能不再是最佳选择。相反,您应该只使用一个简单的 if/else。

于 2013-06-28T16:36:10.793 回答
1

对于此特定实例,您可以执行以下操作:

在这个特定的例子中,你可以使用这个:

$output = (isset($var)) ? $var2 = $var3 = $var : false;

对于这个特定的测试实例,稍微好一点的选择:

$error = (isset($var)) ? !(bool)($var2 = $var3 = $var) : true;

这将设置$errortrueIF$var未设置,并且设置为falseif $var,因此您可以使用块跟进if($error)

然而,三元可能不是解决这个问题的最佳方法......

对于更复杂的实例,您需要使用闭包,或者更糟糕的是,使用预先声明的函数:

$output = (isset($var)) ? setVars($var) : false;

function setVars($var) {
    $var2 = $var3 = $var;
}

在这一点上,使用iforswitch语句可能会更好。

于 2013-06-28T16:49:07.787 回答
0

据我所知,这是不可能的,也不应该是不可能的。(?:)不是,也不应该被视为if,因为它的工作方式不同,也不是为它设计的。

三元运算符的存在是作为根据条件返回值的一种方式,而不是作为“快速” if。

如果您在不需要返回值的情况下使用它,那么您可能使用错了。

在这种特定情况下,您应该使用 if-else 语句。它还有助于使您的代码更具可读性。

于 2013-06-28T16:34:28.760 回答