严格标准:5.0方法权限必须与4.0无权限方法兼容

时间:2010-12-28 20:54:22

标签: php oop

我有一个扩展pdf类的报告生成类。报告生成类以5.0样式编写,其中每个方法都具有权限(publicprivate等或您称之为的任何权限)。基类是用4.0风格编写的,没有方法或变量的publicprivate等声明。

我最近在我们的开发机器上开启了严格的标准,现在我遇到了错误 Strict standards: Declaration of reportPdf::stream() should be compatible with that of Cpdf::stream()

但无论我向stream()提出什么声明,公共,私人,受保护或根本没有权限,我仍然会收到此错误。

我能解决这个问题吗?或者我在处理这个问题时必须关闭严格的标准。

此时迁移到更新的类不是一个选项,因为它对功能支付来说太过分了。当严格标准关闭时,它可以正常工作。


编辑:我做了一些测试,这是结果矩阵。无论如何,Strict Standards仍抱怨。

protected function stream() { ...

Fatal error: Access level to reportPdf::stream() must be public (as in class Cpdf) in

public function stream() { ...

Strict standards: Declaration of reportPdf::stream() should be compatible with that of Cpdf::stream()

private function stream() { ...

Fatal error: Access level to reportPdf::stream() must be public (as in class Cpdf)

function stream() { ...

Strict standards: Declaration of reportPdf::stream() should be compatible with that of Cpdf::stream()

另请注意,stream有0个参数,就像它的父类一样:(

1 个答案:

答案 0 :(得分:0)

如果这会导致应用程序失败,那么代码清洁度就没有意义了。 (=关闭E_STRICT)

话虽如此,我认为差异主要在于参数,而不是在访问修饰符中。 PHP会给出另一个错误。

stream()方法在派生reportPdf类中的参数可能比pdf writer中的参数多或少。如果是这样,您可以通过颠倒定义类的顺序来欺骗PHP。见http://bugs.php.net/bug.php?id=46851