使用 PHP null 合并和三元运算符重置会话时出现问题 [重复]

Problem using PHP null coalescing together with ternary operator to reset a Session [duplicate]

提问人:okunade yusuf 提问时间:11/13/2023 最后编辑:Nigel Renokunade yusuf 更新时间:11/13/2023 访问量:78

问:

我正在尝试使用以下代码重置会话:

<?= 
$_SESSION['pettySuccess']??''; 
(($_SESSION['pettySuccess']??'')=='') ?'': unset($_SESSION['pettySuccess']); 
?>

我的代码背后的想法是让 pettySuccess 会话在计算结果未为 ' ' 时重置会话 但在这里我遇到了一个语法错误。奇怪的是当我更改 unset() 方法时 到 session_unset(),我不再有语法错误,我现在得到的错误是“session_unset() 不接受任何属性”,我的意图是永远不要重置我所有的会话变量。

PHP 会话 条件运算符 unset null-coalescing-operator

评论

0赞 Pippo 11/13/2023
Unset 不是一个函数,它不会返回任何内容,因此它不能用作三元运算符的值。此外,您正在以一种糟糕的方式使用三元运算符,因为您没有分配任何内容。您还使用了松散比较,因此 unset 也将作为 NULL、0、false 等对 valuse 执行。尝试:if ($_SESSION['pettySuccess'] !== '') unset($_SESSION['pettySuccess']);
0赞 achur00 11/13/2023
我认为您可能需要稍微编辑一下您的评论,以便我能够理解您的所有观点,但是随着我能够拾取,我发现了问题所在,这是关于 unset() 不能用作三元运算中的值,我仍然不明白为什么 session_unset() 工作得很好而 unset() 不能。
0赞 Pippo 11/13/2023
@okunadeyusuf session_unset() 返回一个布尔值,可以对其进行计算。更准确地说,unset() 无论它是否被视为函数,都会返回 void,就像 var_dump()echo 一样,并且 void 值不能在表达式中使用。
0赞 achur00 11/13/2023
哦,我现在明白了,如果我坚持使用我的代码,我可以使用这样的东西:<?= $_SESSION['pettySuccess']??'';(($_SESSION['pettySuccess']??'') !=='') ?$_SESSION['pettySuccess']='':'' ; ?>
0赞 Álvaro González 11/14/2023
$_SESSION['pettySuccess']??'';它本身并不能完成任何事情,你不会将生成的值存储在任何地方。

答:

1赞 noah1400 11/13/2023 #1

unset()是一个语句而不是一个函数,因此它不能直接在三元运算符中使用。您可以使用以下代码:

if (isset($_SESSION['pettySuccess']) && $_SESSION['pettySuccess'] !== '') {
    unset($_SESSION['pettySuccess']);
}
0赞 Álvaro González 11/13/2023 #2

我不知道你的业务逻辑是什么,但我怀疑你所需要的只是:

unset($_SESSION['pettySuccess']);

unset() 是一种语言结构,因此它能够检测和忽略缺失的变量(这是常规函数无法做到的),而且它确实如此(是的,不幸的是它没有记录)。