首页 >后端开发 >php教程 >为什么 PHP 不允许在严格模式下使用抽象静态类方法?

为什么 PHP 不允许在严格模式下使用抽象静态类方法?

Linda Hamilton
Linda Hamilton原创
2024-11-19 19:30:03648浏览

Why Did PHP Disallow Abstract Static Class Methods in Strict Mode?

为什么 PHP 的严格模式不允许抽象静态类方法

在 PHP 5.2 中,启用严格警告将触发抽象静态类方法的警告。实施此限制是由于 PHP 5.0.x 和 5.1.x 错误地允许此类方法,并打算在以后的版本中禁止它们。

PHP 5.2 中抽象静态方法的问题

这个问题是由后期静态绑定的行为引起的,直到 PHP 5.3 才引入。在 PHP 5.2 中,如下例所示的代码将无法按预期工作:

abstract class ParentClass {
    static function foo() {
        echo "I'm gonna do bar()";
        self::bar();
    }

    abstract static function bar();
}

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

ChildClass::foo();

在这种情况下, self::bar() 将显式引用 ParentClass 中的 bar() 方法,即使 foo( ) 作为 ChildClass 的方法被调用。这使得 PHP 5.2 中的抽象静态方法毫无用处,因为抽象方法的全部意义在于允许子类中的不同实现。

PHP 5.3 后缺乏合理性

随着 PHP 5.3 中后期静态绑定的引入,反对抽象静态方法的主要争论被消除了。现在可以使用 Static::bar() 代替上面示例中的 self::bar(),允许父类中定义的方法调用子类中的静态方法。

警告

尽管引入了最新的静态绑定,但抽象静态方法的警告仍然保留在 PHP 中。由于 PHP 创始人 Rasmus Lerdorf 的误解,要求删除的 PHP 错误报告 53081 被错误地关闭为“虚假”。

PHP 7 中的解决方案

最后,在 PHP 7 中,该警告被删除。 PHP RFC:重新分类 E_STRICT 通知将其重新分类为通知,不再在严格模式下引发错误。此更改认可了抽象静态方法的有用性和有效性。

以上是为什么 PHP 不允许在严格模式下使用抽象静态类方法?的详细内容。更多信息请关注PHP中文网其他相关文章!

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