我们正在开发针对 5.2 开发的 PHP 应用程序,但我们最近迁移到了 PHP 5.3。我们没有时间去解决所有迁移到 PHP 5.3 的问题。具体来说,我们有很多消息:
Declaration of Object::Function should be compatible with that of Parent::function
我们可以随着时间的推移修复这些问题,但这需要数周时间。同时我们可以设置:
error_reporting = E_ALL & ~E_STRICT
但是这是为整个脚本全局设置的。我们希望继续获取我们编写的新代码的 E_STRICT 消息。是否可以仅指示应忽略 E_STRICT 消息的功能?我正在考虑类似于 Java 的 @SuppressWarnings 注释的东西。
最佳答案
不幸的是,php 的@
抑制器只适用于表达式而不是类定义。您的具体示例似乎也与 bug 有关,现在标记为假的。不过我认为这是一个错误,但我认为警告实际上应该显示更多。
不过,您可以做的是在整个脚本中多次更改 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() 的声明兼容”。
关于抑制严格标准消息的 PHP 机制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8222034/