首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在PHP8中处理“Undefined array key”警告

在PHP8中处理“Undefined array key”警告
EN

Stack Overflow用户
提问于 2021-05-15 13:32:27
回答 1查看 491关注 0票数 1

由于PHP8将未定义的数组键通知升级为警告,我遇到了错误日志被淹没的问题,这是因为我们的遗留代码是以一种依赖于PHP隐含的真/假的方式编写的。

例如。

代码语言:javascript
运行
复制
if ($_POST['submit']) { ... } else { ... }
<input value="<?=$this_page['id']?>"> # in a shared add/edit form

以前我很乐意抑制E_NOTICE,但我不准备用E_WARNING来做这件事。

我知道最好的解决方案是重构代码,利用包装器/抽象类与超全局变量交互,并为数据库对象使用基于对象的模型。不幸的是,我有更多的100+遗留应用程序要在6个月内使PHP8兼容,因此主要的重构不在范围之内。

我试过使用ArrayObject,它可以通过重载offsetGet/Set来解决一些问题,但这破坏了与array_*函数的兼容性,并产生了与第三方软件包的潜在问题。

我想知道是否有人已经开发了解决这个问题的方法,或者有任何关于更多替换的想法。除了重大重构或关闭项目之外,我对几乎任何想法都持开放态度!搜索/替换、特定于项目的配置、服务器级配置、polyfills,我都在这里。

EN

回答 1

Stack Overflow用户

发布于 2021-05-16 01:10:31

如果你乐于做一些查找和替换,有一些构造可以保证相同的行为,但没有警告。

最通用的是the ?? null coalescing operator,它允许您将未设置的数组键转换为显式null:

代码语言:javascript
运行
复制
if ($_POST['submit']??null) { ... } else { ... }
<input value="<?=$this_page['id']??null?>"> 

更符合逻辑的是,echo语句中的默认值是空字符串:

代码语言:javascript
运行
复制
<input value="<?=$this_page['id']??''?>"> 

if语句中的逻辑缺省值是布尔值false,但可能更具可读性的是the empty pseudo-function

代码语言:javascript
运行
复制
if (! empty($_POST['submit'])) { ... } else { ... }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67543569

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档