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

Linda Hamilton
Release: 2024-11-19 19:30:03
Original
576 people have browsed it

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

Why PHP's Strict Mode Disallows Abstract Static Class Methods

In PHP 5.2, enabling strict warnings would trigger warnings for abstract static class methods. This restriction was implemented due to PHP 5.0.x and 5.1.x mistakenly allowing such methods, with the intention of disallowing them in later versions.

The Problem with Abstract Static Methods in PHP 5.2

The issue arises from the behavior of late static bindings, which were not introduced until PHP 5.3. In PHP 5.2, code like the example below would not work as intended:

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();
Copy after login

In this case, self::bar() would explicitly refer to the bar() method in ParentClass, even when foo() was called as a method of ChildClass. This rendered abstract static methods in PHP 5.2 useless, as the whole point of abstract methods is to allow for different implementations in child classes.

The Lack of Justification Post PHP 5.3

With the introduction of late static bindings in PHP 5.3, the main argument against abstract static methods was eliminated. Static::bar() could now be used instead of self::bar() in the example above, allowing methods defined in a parent class to call static methods in child classes.

The Persistence of the Warning

Despite the introduction of late static bindings, the warning for abstract static methods remained in PHP. PHP bug report 53081, which called for its removal, was erroneously closed as "bogus" due to a misunderstanding by Rasmus Lerdorf, the creator of PHP.

The Resolution in PHP 7

Finally, in PHP 7, the warning was removed. PHP RFC: Reclassify E_STRICT notices reclassified it as a notice, no longer raising an error in strict mode. This change recognizes the usefulness and validity of abstract static methods.

The above is the detailed content of Why Did PHP Disallow Abstract Static Class Methods in Strict Mode?. For more information, please follow other related articles on the PHP Chinese website!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template