【发布时间】:2015-06-05 03:39:57
【问题描述】:
你可以在 PHP 中使用三元运算符而不用结束 'else' 语句吗?我已经尝试过了,它正在返回错误。谷歌搜索没有产生任何结果,所以我认为答案可能是否定的。我只是想在这里仔细检查一下。例如:
if ( isset($testing) {
$new_variable = $testing;
}
仅当 $testing 存在时才设置 $new_variable。现在我可以了
$new_variable = (isset($testing) ? $testing : "");
但如果 $testing 未设置,则 $new_variable 将返回一个空变量。如果没有设置,我不想要一个空变量,我希望不创建 $new_variable。
我试过了
$new_variable = (isset($testing) ? $testing);
它返回了错误。我也试过了
$new_variable = (isset($testing) ? $testing : );
它也返回了错误。有没有办法在没有附加 else 语句的情况下使用三元运算符,还是我坚持用手写方式写出来?
编辑:按照 Rizier123 的建议,我尝试将等式的“else”部分设置为 NULL,但最终仍将键附加到数组中。价值不存在,但关键是,这打乱了我的计划。请允许我进一步解释。
代码将从表单中获取一堆 $_POST 变量,并将它们用作 stdClass 中的参数,然后用于 API 方法调用。一些表单变量将不存在,因为它们都应用于 API 调用的同一个变量,但用户只能选择一个。例如,也许您可以选择 3 个项目,您选择的任何一个项目都会传递给 stdClass 而其他 2 个不存在。
我试过了:
$yes_this_test = "IDK";
$setforsure = "for sure";
$list = new stdClass;
$list->DefinitelySet = $setforsure;
$list->MaybeSet = (isset($yes_this_test) ? $yes_this_test : NULL);
$list->MaybeSet = (isset($testing) ? $testing : NULL);
print_r($list);
但显然 MaybeSet 被设置为 NULL 因为 (isset($testing) 出现在 (isset($yes_this_test) 之后并且它返回
stdClass Object ( [DefinitelySet] => for sure [MaybeSet] => )
我不知道 $_POST 变量的输入顺序是什么,所以我不能真正以这样的方式构造它以确保列表以正确的顺序得到处理。
现在我知道我可以做类似的事情
if ( isset($yes_this_test ) {
$list->MaybeSet = $yes_this_test;
}
elseif ( isset($testing) ) {
$list->MaybeSet = $testing;
}
但我希望这种类型的逻辑有一个速记,因为我必须写几十个这样的逻辑。是否有类似于用于 if/elseif 语句的三元运算符的运算符?
【问题讨论】:
-
另一种选择是使用不带花括号的 if 语句。它也可以在类似于三元的一行上。
if(isset($testing)) $new_variable = $testing;。 IMO 我不喜欢没有花括号,但只是说这是可能的。 IMO 最好像 Rizier 建议的那样将其设置为 NULL,因为如果值为 NULL,则 isset 将返回 false。isset($nullVar)将返回 false。
标签: php if-statement ternary-operator