因此,看起来他们改变了访问具有未知密钥的数组会引发消息的方式。
<?php
if($myArray['foo']) { ... }
25年来,这只是发出一个通知,人们很乐意保持沉默E_NOTICE
in php.ini
。对于(我认为)PhP 8.0,这现在引发了一个警告。
出于显而易见的原因,我不想保持沉默E_WARNING
,所以我(以及世界上所有其他多年来使用未初始化变量的人,因为它们的值只是null
就像许多其他解释语言一样)正在寻找一种可能的方法来消除与未定义变量/数组/键相关的警告,同时保留报告所有其他(更严重的)编程错误,例如包含不存在的文件。
这个问题背后的原因是我必须处理大量用上述模式编写的代码;我只是无法全部重写,但我仍然需要切换到 PhP 8,所以不,我不是问如何使用isset()
.
您可以致电set_error_handler
函数并定义绕过该特定警告的回调。当回调返回 true 时,它不会触发 php 错误处理并且不会执行任何操作,在所有其他情况下(返回 false)它将使用默认错误处理。在这里查看更多内容:https://www.php.net/manual/en/function.set-error-handler.php 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,并且您只能有一个错误处理程序回调,因此它可能始终无法正常工作
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)