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 的引入,完全支持抽象静态方法,可以安全使用而不会触发任何警告。
以上是为什么 PHP 5.2 不允许抽象静态类方法?的详细内容。更多信息请关注PHP中文网其他相关文章!