使用没有Else语句PHP的Ternary运算符

问题描述 投票:19回答:3

您是否可以在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 : );

它也返回了错误。有没有办法在没有附加其他声明的情况下使用三元运算符,或者我是不是刻意写出来?

编辑:按照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语句的三元运算符的运算符?

php if-statement ternary-operator
3个回答
24
投票

Since PHP 5.3你可以这样做:

!isset($testing) ?: $new_variable = $testing;

如您所见,它仅在条件为假时使用该部分,因此您必须否定isset表达式。

UPDATE

Since PHP 7.0你可以这样做:

$new_variable = $testing ?? null;

如您所见,它返回第一个操作数(如果存在且不为NULL);否则返回第二个操作数。

UPDATE

Since PHP 7.4你可以这样做:

$new_variable ??= $testing;

如果它是isset,它会分配值,否则将分配NULL


8
投票

只需将它设置为NULL,如下所示:

$new_variable = (isset($testing) ? $testing : NULL);

使用isset()检查,you变量将返回false。

您可以在手册中阅读有关NULL的更多信息。

从那里引用:

特殊的NULL值表示没有值的变量。 NULL是null类型唯一可能的值。

如果出现以下情况,变量被视为null

  • 它已被赋予常量NULL。
  • 它尚未设定为任何值。
  • 它一直未设置()。

0
投票

你也可以这样做(简短形式):

isset($testing) ? $new_variable = $testing : NULL;
© www.soinside.com 2019 - 2024. All rights reserved.