PHP 8.0+如何以简洁的方式向未知的SESSION变量追加字符串而不发出警告

8yoxcaq7  于 2023-02-15  发布在  PHP
关注(0)|答案(1)|浏览(70)

以前PHP 7.4中的代码如下所示:

$_SESSION['message'] .= "Sorry; That file or location can not be found.";

它将附加到现有字符串或设置为新字符串的内容。而且我的错误日志(关闭通知)将非常空。
现在在PHP 8.0+中,undefined array elements(以及其他内容)被分类为警告而不是通知。
PHP警告:第29行/index.php中未定义的数组键"message"
我理解这个 * Warning * 背后的概念逻辑,但是在上面代码的示例中,它需要一个冗长的解决方案;比如:

if(array_key_exists('message', $_SESSION)){
    $_SESSION['message'] .= "Sorry; That file or location can not be found.";
}
else {
    $_SESSION['message'] = "Sorry; That file or location can not be found.";
}

或者可能;

$_SESSION['message'] = (array_key_exists('message', $_SESSION)?$_SESSION['message']:"") 
                       ."Sorry; That file or location can not be found.";

这对于成千上万的会话元素在几十个网站是真的看起来粗糙;更难阅读,一般是一个很大的膨胀,以避免警告消息,似乎没有任何意义。
我不想关闭警告消息。
是否有任何可能的变通办法;比如php.ini中的任何方法,以避免这种触发器的连接操作(.=)?我们可以设法逃脱超全局或更具体的SESSION数据(和POST数据可能),这是不可能知道它的值连接之前.

eqqqjvef

eqqqjvef1#

更简洁的解决方法可以是:

$_SESSION['message'] = ($_SESSION['message'] ?? ''). " string here";

这可能是最好的。

相关问题