我有一个扩展pdf类的报告生成类。报告生成类以5.0样式编写,其中每个方法都具有权限(public
,private
等或您称之为的任何权限)。基类是用4.0风格编写的,没有方法或变量的public
,private
等声明。
我最近在我们的开发机器上开启了严格的标准,现在我遇到了错误
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个参数,就像它的父类一样:(
答案 0 :(得分:0)
如果这会导致应用程序失败,那么代码清洁度就没有意义了。 (=关闭E_STRICT)
话虽如此,我认为差异主要在于参数,而不是在访问修饰符中。 PHP会给出另一个错误。
stream()
方法在派生reportPdf
类中的参数可能比pdf writer中的参数多或少。如果是这样,您可以通过颠倒定义类的顺序来欺骗PHP。见http://bugs.php.net/bug.php?id=46851