我可以隐藏PHP警告:未定义的数组键而不抑制所有其他警告吗



因此,看起来他们改变了使用未知键访问数组引发消息的方式。

<?php
if($myArray['foo']) { ... }

25年来,这只是发出一个通知,人们很乐意让E_NOTICEphp.ini中沉默。(我认为(PhP 8.0现在引发了一个警告。

出于显而易见的原因,我不想让E_WARNING静音,所以我(以及世界上所有其他多年来使用未初始化变量的人,因为它们的值只是null,就像在许多其他解释语言中一样(正在寻找一种可能的方法来消除与未定义变量/数组/键相关的警告,同时不断报告所有其他(更严重的(编程错误,比如包括不存在的文件。

这个问题背后的原因是,我必须处理大量按照上述模式编写的代码;我只是不能重写所有内容,但我仍然需要切换到PhP8,所以不,我不是在问如何使用isset()

您可以调用set_error_handler函数并定义一个绕过特定警告的回调。当回调返回true时,它不会触发php错误处理,也不会执行任何操作,在所有其他情况下(返回false(,它将使用默认的错误处理。点击此处查看更多信息:https://www.php.net/manual/en/function.set-error-handler.php

set_error_handler(function(int $errno, string $errstr) {
if ((strpos($errstr, 'Undefined array key') === false) && (strpos($errstr, 'Undefined variable') === false)) {
return false;
} else {
return true;
}
}, E_WARNING);

请注意,有些框架会自己调用set_error_handler,并且您只能有一个错误处理程序回调,因此它可能总是不起作用

使用错误抑制运算符@

<?php
if(@$myArray['foo']) { ... }

它不如isset((,但至少它清楚地告诉读者,您偶尔会期望无效索引。

现在是偿还技术债务的时候了。

相关内容

最新更新