PHP 5.2 严格模式:为什么不允许抽象静态类方法?
在 PHP 5.2 中,启用严格警告可能会触发熟悉的警告:“静态函数不应该是抽象的”。此警告源于 PHP 5.2 中引入的一项更改,该更改不允许抽象静态类方法。
原因:历史监督
PHP 5.2 最初缺乏后期静态绑定,使抽象静态函数变得无用。由于抽象静态方法中的 self 关键字引用的是父类,而不是调用该方法的子类,因此此类方法没有实际意义。因此,该警告旨在捕获并防止潜在的编码错误。
晚期静态绑定和有缺陷的调整
在 PHP 5.3 中,引入了晚期静态绑定,允许使用 static 关键字从父方法调用子类的静态方法。这消除了使抽象静态方法无用的技术障碍。然而,基于一个薄弱的论据,该警告在 PHP 5.2 中持续存在:暴露抽象静态方法可能会导致公共方法损坏。
错误感知
The justification for这个警告是有缺陷的。抽象静态方法可以与后期静态绑定共存,为从父方法调用子类的静态方法提供了有效的用例。
混乱和不准确的响应
A PHP 错误报告请求删除由于添加后期静态绑定而产生的警告,但收到了 Rasmus Lerdorf 的不屑一顾的回应。他错误地指出具有后期静态绑定的抽象静态方法是有效的,这是不正确的,因为它们仍然会触发警告。这种混乱和不明确导致了警告的持续存在。
PHP 7 中的解决方案
幸运的是,PHP 7 终于纠正了这个问题,重新分类了这个警告仅仅是一个通知。随着 PHP 7 的引入,完全支持抽象静态方法,并且可以安全使用而不会触发任何警告。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3