您是否可以在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语句的三元运算符的运算符?
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
。
只需将它设置为NULL
,如下所示:
$new_variable = (isset($testing) ? $testing : NULL);
使用isset()
检查,you变量将返回false。
您可以在手册中阅读有关NULL
的更多信息。
从那里引用:
特殊的NULL值表示没有值的变量。 NULL是null类型唯一可能的值。
如果出现以下情况,变量被视为null
:
你也可以这样做(简短形式):
isset($testing) ? $new_variable = $testing : NULL;