PHP、速记法、使用三元运算符的If..Else

3
有没有一行代码可以搞定这个问题?使用一个好的三元运算符?
$F_NAME = $_SESSION['USR']['F_NAME'];
if(isset($_POST['F_NAME'])) {$F_NAME = $_POST['F_NAME'];}

基本上,如果POST已发送,即使帖子为空,也应该显示它,否则仅在未设置或为空的情况下从会话中获取值。在这里可能有点儿打太极了......寻找类似于以下内容的东西:
$F_NAME = ? ($F_NAME ? isset($_POST['F_NAME']) : $_SESSION['USR']['F_NAME']);

$F_NAME = (isset($_POST['F_NAME']) ? $_POST['F_NAME'] : $_SESSION['USR']['F_NAME']); - Sunil Pachlangia
2个回答

3

Its supposed to be:

(conditions) ? true : false
   satisfies <--^      ^----> did not satisfy

所以,这可以转化为:
$F_NAME = isset($_POST['F_NAME']) ? $_POST['F_NAME'] : $_SESSION['USR']['F_NAME'];

所以看起来是这样的:(条件?真结果:假结果) - Christian Žagarskas
是的,在条件语句中像您所写的$F_NAME ? isset($_POST['F_NAME'])一样使用?是不正确的。 - Kevin
很棒。我将它与设置选项为{variable}的foreach一起使用。 foreach ($_SESSION['USR'] as $key => $value) { ${$key} = (isset($_POST[$key]) ? $_POST[$key] : $_SESSION['USR'][$key]); } - Christian Žagarskas
@ChristianŽagarskas 如果您想先检查值是否存在,那么这应该完全可行。很高兴能帮到您。 - Kevin

1
作为Ghost的响应,甚至更短
$F_NAME = $_POST['F_NAME'] ? : $_SESSION['USR']['F_NAME'];

谢谢!Ghost是正确的,我必须满足两个条件,语句不能默认为$_SESSION['USR']['F_NAME']。 - Christian Žagarskas
但你可以理解速记。 - Tom

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接