为什么 PHP 5.2 不允许抽象静态类方法?

DDD
发布: 2024-11-11 03:44:02
原创
996 人浏览过

Why Did PHP 5.2 Disallow Abstract Static Class Methods?

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板