因此,看起来他们改变了使用未知键访问数组引发消息的方式。
<?php
if($myArray['foo']) { ... }
25年来,这只是发出一个通知,人们很乐意让E_NOTICE
在php.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((,但至少它清楚地告诉读者,您偶尔会期望无效索引。
现在是偿还技术债务的时候了。