一尘不染

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

php

在PHP 5.2中启用严格警告之后,我看到了一个项目中的大量严格标准警告,这些项目最初编写时没有严格警告:

严格标准静态函数 Program :: getSelectSQL()在Program.class.inc中 不应抽象

有问题的函数属于抽象父类Program,并且被声明为抽象静态,因为它应该在其子类(例如TVProgram)中实现。

我确实在这里找到有关此更改的参考:

删除了抽象静态类函数。由于疏忽,PHP 5.0.x和5.1.x允许在类中使用抽象静态函数。从PHP 5.2.x开始,只有接口可以拥有它们。

我的问题是:有人可以清楚地解释为什么PHP中不应该有一个抽象的静态函数吗?


阅读 219

收藏
2020-05-26

共1个答案

一尘不染

静态方法属于声明它们的类。扩展类时,可以创建一个同名的静态方法,但实际上并没有实现静态抽象方法。

使用静态方法扩展任何类也是如此。如果扩展该类并创建具有相同签名的静态方法,则实际上并没有覆盖超类的静态方法。

编辑 (2009年9月16日) 对此进行了更新。运行PHP5.3,我看到抽象静态技术又回来了,不管是好是坏。

__
abstract staticPHP 5.3仍然不允许 更正(由philfreo进行),LSB是相关的但有所不同。

2020-05-26