我们正在开发一个为5.2开发的PHP应用程序,但我们最近迁移到了PHP 5.3。我们没有时间来解决迁移到PHP 5.3的所有问题。具体来说,我们有很多消息:
Object :: Function的声明应该与 父::功能
我们可以随着时间的推移解决这些问题,但这需要几周的时间。与此同时,我们可以设置:
error_reporting = E_ALL & ~E_STRICT
但这是为整个脚本全局设置的。我们希望继续为我们编写的新代码获取E_STRICT消息。是否可以仅指示应忽略E_STRICT消息的功能?我正在考虑类似于Java的@SuppressWarnings注释。
答案 0 :(得分:0)
不幸的是,在编译时,可能会抛出像你提到的严重错误,而不是运行时。如上所述in the docs:
警告强>
因此,大多数 E_STRICT 错误在编译时进行评估 在error_reporting所在的文件中不会报告此类错误 增强以包含 E_STRICT 错误(反之亦然)。
如果是这种情况,也许你可以像在那里一样禁用php.ini中的E_STRICT
错误,
error_reporting = E_ALL & ~E_STRICT
但是在运行时使用error_reporting()
;
error_reporting(E_ALL|E_STRICT);
也许这会跳过所有编译时间? (免责声明:听起来不错,但我还没试过。)
如果不是在编译时抛出的错误,您可以执行相反的操作并在php.ini中启用它们,并且只在您想要的部分中使用error_reporting()
禁用它们忽略,或者通过设置set_error_handler()
的自定义错误处理程序,有选择地忽略从某些地方抛出的严格错误。
答案 1 :(得分:0)
不幸的是,php的@
抑制器仅适用于表达式而不是类定义。您的具体示例似乎也与bug绑定,现在标记为虚假。但我认为这是一个错误,但我认为该警告实际上应该显示 more 。< / p>
但是,您可以做的是在整个脚本中多次更改error_reporting
级别,假设您的新代码很容易与旧代码分开。如果你正在使用相同的课程,虽然这会变得更加困难。
您可以使用错误处理程序来过滤一些您不想报告的函数和方法,但是:
set_error_handler('GOON', E_STRICT);
function GOON($errno, $errstr) {
if (is_strict_function($errstr)) {
echo "$errstr\n";
}
}
function is_strict_function($str) {
foreach (
array(
'xzin::goon'
//Other functions or methods go here
)
as $fnc
) {
if (strpos($str, $fnc) !== false) {
return false;
}
}
return true;
}
error_reporting(E_ALL | E_STRICT);
class xzin extends zin {
function goon($a) {}
}
class tzin extends zin {
function goon($a) {}
}
class zin {
function goon() {}
}
打印:“tzin :: goon()的声明应该只与zin :: goon()的声明兼容。