您能在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语句的三元运算符的运算符?
由于PHP 5.3,您可以执行以下操作:
!isset($testing) ?: $new_variable = $testing;
正如您所看到的,它只在条件为false时使用该部分,因此您必须否定isset
表达式。
更新
从PHP 7.0开始,你可以这样做:
$new_variable = $testing ?? null;
正如您所看到的,如果它存在并且不为NULL,它将返回其第一个操作数;否则返回第二个操作数。
更新
从PHP 7.4开始,你可以这样做:
$new_variable ??= $testing;
如果它是isset
,则它单独留下$new_variable
,否则将$testing
分配给它。
只需将其设置为NULL
,如下所示:
$new_variable = (isset($testing) ? $testing : NULL);
通过isset()
检查,您的变量将返回false。
您可以在手册中阅读更多关于NULL
的信息。
还有一句话:
特殊的NULL值表示一个没有值的变量。NULL是唯一可能的NULL类型的值。
一个变量被认为是null
,如果:
- 它被分配了常量NULL
- 尚未将其设置为任何值
- 它已被取消设置()
由于PHP 7.0,您可以执行以下操作,而不会获得ErrorException"试图获取非对象的属性"roomNumber"":
$house = new House();
$nr = $house->tenthFloor->roomNumbers ?? 0
假定属性";tenthFloor";不存在于类"中;House";,上面的代码不会抛出错误。而下面的代码将抛出ErrorException:
$nr = $house->tenthFloor->roomNumbers ? $house->tenthFloor->roomNumbers : 0
您也可以这样做(缩写):
isset($testing) ? $new_variable = $testing : NULL;
在短中写入语句时,仅使用NULL跳过语句
$a == $b? $a = 20 : NULL;