当使用未定义的常量时,是否存在php.ini设置或其他一些强制PHP产生致命错误或类似错误的技巧,而不是假设一个同名字符串的(荒谬)默认行为?
默认行为可能是一个巨大的安全风险,但更多时候只会导致应用程序错误。我意识到我可以在请求值之前使用defined()
检查常量的存在,但这会导致冗余/丑陋的代码,并且仍然容易出现开发人员错误。我们非常小心确保使用的常量被定义,但是这个问题偶尔会潜入生产中,如果可能的话我想阻止它。一个致命的错误将更“在你的脸上”,并且更不可能被QA挤压。
答案 0 :(得分:3)
set_error_handler(function($type, $error) {
if(stripos($error, 'Use of undefined constant') !== FALSE)
{
// god forbid - someone's used an undefined constant. Act appropriately.
trigger_error($error, E_USER_ERROR); // Triggers a fatal error.
return TRUE;
}
}, E_NOTICE);
这可能是你正在寻找的,据我所知,没有办法修改PHP的错误'排名'。
答案 1 :(得分:2)
未定义的常量会生成PHP通知。
您可以为任何PHP警告抛出异常,至少在开发模式下:
set_error_handler(function ($errno, $errstr, $errfile, $errline) {
throw new ErrorException($errstr, $errno, 1, $errfile, $errline);
// or turn it in a fatal error
trigger_error($errstr, E_USER_ERROR);
});
如果您只想处理undefined constant
警告,请测试$errstr
是否与Use of undefined constant FOO - assumed 'FOO'
匹配。
注意:只有不合格的全局常量才会像这样。 PHP为未定义的类常量和未定义的命名空间常量(例如Foo::BAR
或Foo\BAR
)抛出致命错误。
因此,如果您希望PHP在使用未定义的常量时抛出致命错误,则另一种解决方案是使用类常量或命名空间常量。