PHP简写IF中的true子句中的多个动作

时间:2013-06-28 16:25:11

标签: php conditional-operator shorthand-if

非常确定这是一个简单的答案,但由于使用了模糊的术语而难以搜索。

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

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

<?php

$var = "whatever";

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

?>

显然这意外停止了;但希望你能理解我想要完成的任务。

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

谢谢!

修改

我理解,应该质疑速记是否适合这种情况。但仍然可以做到,问题就在于此。

3 个答案:

答案 0 :(得分:7)

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

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

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

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

答案 1 :(得分:0)

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

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

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

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

答案 2 :(得分:0)

对于此特定情况,您可以执行以下操作:

在这个特定情况下,你可以使用它:

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

此特定测试实例的选项略胜一筹:

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

这会将$error设置为true如果$var未设置,如果false设置为$var,那么您可以关注这是一个if($error)块。

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

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

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

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

此时,使用ifswitch语句可能会更好。