非常确定这是一个简单的答案,但由于使用了模糊的术语而难以搜索。
我正在使用简写if语句,并且当它返回true时想要执行多个操作,语法是什么样的?
例如,从逻辑上思考我尝试了类似的东西:
<?php
$var = "whatever";
(isset($var) ? $var2=$var; $var3=$var : $error="fubar");
?>
显然这意外停止了;但希望你能理解我想要完成的任务。
很抱歉,如果这是一个重复的问题,我发誓我搜索了它。 :)
谢谢!
修改
我理解,应该质疑速记是否适合这种情况。但仍然可以做到,问题就在于此。
答案 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;
}
此时,使用if
或switch
语句可能会更好。