经过PHP开发这么多时间之后,我很好奇为什么PHP中的默认错误设置在PHP7之前是可以接受的。
有关错误和警告的默认错误处理是打印到STDERR并继续,就像没有发生任何事情一样。为什么这被认为是正确的? PHP的开发人员如何得出这个结论?通知和警告总是意味着某种情况,通常是某种状态已经被破坏了。
我相信这会让开发人员无缘无故地产生混乱。考虑堆栈上的以下帖子:
Should PHP 'Notices' be reported and fixed?
Turn off warnings and errors on php/mysql
How do I turn off PHP Notices?
应将通知和警告转换为异常对象,以便您可以根据其意思采取行动,而不是让新开发人员相信可以安全地忽略它们。
考虑以下方法:
//This method is the default error handler for the entire application
//It throws an exception instead of an error
//$level = Error level that the system is throwing (Warning,Notice,All,ect)
//$message = Error message that the server is passing
//$file = File in which the error occured
//$line = Line in which the error occured
//array $context = Array of variables that were available in the scope of the error
public function ErrorHandler($level,$message,$file,$line,$context)
{
switch($level)
{
//throw a PHPNoticeException on notices
case E_NOTICE:
throw new PHPNoticeException($message,$level);
break;
//Throw a PHPWarningException on warnings
case E_WARNING:
throw new PHPWarningException($message,$level);
break;
//Throw PHPExceptions on everything else
default:
throw new PHPException($message,$level);
}
}
利用上述内容,可以捕获并处理错误和通知。但是,在默认状态下,程序员无法对发生的任何警告或通知采取行动,甚至无法知道它们是在第一时间发生的。
再次陈述我的问题,为什么无声错误是默认行为?为什么这个决定是由PHP开发人员做出的?它使开发人员相信通知和警告并不重要。我认为这是不负责任和应受谴责的。