首页  >  文章  >  后端开发  >  为什么 PHP 5.2 中取消了抽象静态类方法?

为什么 PHP 5.2 中取消了抽象静态类方法?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-11-12 04:26:01300浏览

Why Were Abstract Static Class Methods Abolished in PHP 5.2 ?

PHP 在 5.2 中废除抽象静态类方法

在 PHP 5.2 及更高版本中,禁止在类中使用抽象静态方法。这个决定源于疏忽、设计缺陷和对 self 关键字的误解。

有问题的上下文

最初,PHP 5.0x 和 5.1x 错误地允许在类中声明抽象静态函数。然而,由于缺乏后期静态绑定,这变得毫无用处。因此,类似下面的代码将会失败:

abstract class ParentClass {
    static function foo() {
        self::bar();
    }

    abstract static function bar();
}

class ChildClass extends ParentClass {
    static function bar() {
        echo "Hello, World!";
    }
}

ChildClass::foo();

在此示例中,foo() 中的 self::bar() 调用引用了 ParentClass 中的 bar() 方法,即使 foo( ) 作为 ChildClass 的方法被调用。因此,代码会生成致命错误,表明无法调用抽象方法 ParentClass::bar()。

警告的理由

鉴于此限制,PHP 5.2 正确地发出警告,劝阻使用抽象静态方法。由于它们没有实际用途,任何使用都可能是由于误解而被认为是糟糕的代码。

误解已解决

PHP 5.3 引入了最新的静态绑定,允许父类中的方法访问子类中的静态方法。有了这个补充,禁止抽象静态方法的理由就变得不那么令人信服了。然而,由于暴露损坏的静态方法可能会出现问题,警告仍然存在。

错误及其解决方案

不幸的是,Rasmus Lerdorf 的误解, PHP 的创建者错误地关闭了一份主张删除警告的错误报告。随后,尽管缺乏充分的理由,该警告仍然存在。

抽象静态方法的未来

幸运的是,PHP 7 终于删除了该警告,因为RFC 中提议:重新分类 E_STRICT 通知。随着其废除,开发人员可以再次使用抽象静态方法,而不会遇到虚假警告。

以上是为什么 PHP 5.2 中取消了抽象静态类方法?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn