我们正在升级到 PHP 8.1。一个新功能是未定义的数组键会引发警告。
不幸的是,这会干扰轻松使用关联数组(例如 $_SESSION 变量)的能力。我理解预定义变量的优点,我不是在寻找关于这些优点的讨论。关联数组的想法是您可以轻松地将内容添加到会话中,并且所有未分配的内容都被评估为空。但现在它也发出警告;必须采取一些措施来解决这个问题。
这是一些代码的示例:
$_SESSION['is_condition'] = true;
在代码的另一个地方,出现以下情况
if ($_SESSION['is_condition']) ...
如果这发生在未定义“is_condition”会话变量的上下文中,则将其值评估为 null 的预期结果就是我们想要的。但是现在必须做其他事情来处理它未定义的可能性。
有几种方法可以解决这个问题:
预定义所有值为 null 的会话变量。似乎它不是关联数组的精神。现在每个脚本都必须调用一组冗长的代码。
每当需要关联数组元素的值时,请使用空合并运算符。在整个代码库中放置许多额外的运算符是一个丑陋的要求。
更改我们的自定义错误处理函数以忽略未定义的数组键错误。抑制警告并增加开销是一个非常糟糕的主意。
这些方法都不是非常理想的。
解决此问题的一种理论方法是使用数组初始化语句,将所有可能的关联键分配给 null。我不知道有这样的事情。
我的问题是我是否缺少其他一些方法,例如仅抑制此特定警告的参数。