你可以在PHP中使用三元运算符而无需关闭'否则'声明?我已经尝试了它并且它返回了错误。谷歌搜索不会产生任何结果,所以我认为答案可能是否定的。我只是想在这里仔细检查一下。例如:
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的建议,我尝试设置其他'其他'等式的一部分为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语句的三元运算符的运算符?
答案 0 :(得分:24)
Since PHP 5.3你可以这样做:
!isset($testing) ?: $new_variable = $testing;
如您所见,如果条件为 false ,它仅使用该部分,因此您必须否定isset
表达式。
<强>更新强>
Since PHP 7.0你可以这样做:
$new_variable = $testing ?? null;
如您所见,它返回第一个操作数(如果存在且不为NULL);否则它返回第二个操作数。
答案 1 :(得分:8)
只需将其设置为NULL
,就像这样:
$new_variable = (isset($testing) ? $testing : NULL);
you变量将通过isset()
检查返回false。
您可以在手册中阅读有关NULL
的更多信息。
从那里引用:
特殊的 NULL值表示没有值的变量。 NULL是null类型唯一可能的值。
如果符合以下情况,则变量被视为null
答案 2 :(得分:1)
自PHP 7.0起,您可以执行以下操作,无,但发生ErrorException“ 试图获取非对象的属性'roomNumber'”:
$house = new House();
$nr = $house->tenthFloor->roomNumbers ?? 0
假设属性“ tenthFloor”在“房屋”类中不存在,则上面的代码将不会引发错误。 而下面的代码将引发ErrorException:
$nr = $house->tenthFloor->roomNumbers ? $house->tenthFloor->roomNumbers : 0
答案 3 :(得分:0)
您也可以这样做(简称):
isset($testing) ? $new_variable = $testing : NULL;