PHP's Abolishment of Abstract Static Class Methods in 5.2
In PHP 5.2 and beyond, the use of abstract static methods within classes is prohibited. This decision stems from a combination of oversight, design flaws, and a misunderstanding of the self keyword.
The Problematic Context
Initially, PHP 5.0x and 5.1x mistakenly allowed the declaration of abstract static functions within classes. However, this was rendered useless due to the absence of late static bindings. As a result, code like the following would fail:
abstract class ParentClass { static function foo() { self::bar(); } abstract static function bar(); } class ChildClass extends ParentClass { static function bar() { echo "Hello, World!"; } } ChildClass::foo();
In this example, the self::bar() call in foo() refers to the bar() method in ParentClass, even when foo() is invoked as a method of ChildClass. Consequently, the code generates a fatal error, indicating that the abstract method ParentClass::bar() cannot be called.
The Justification for the Warning
Given this limitation, PHP 5.2 rightfully issued a warning to discourage the use of abstract static methods. Since they served no practical purpose, any usage was likely due to a misunderstanding and was therefore considered bad code.
The Misunderstanding Resolved
PHP 5.3 introduced late static bindings, allowing methods in parent classes to access static methods in child classes. With this addition, the rationale for prohibiting abstract static methods became less compelling. However, the warning persisted due to a tenuous argument that exposing broken static methods could be problematic.
The Error and Its Resolution
Unfortunately, a misunderstanding by Rasmus Lerdorf, PHP's creator, led to the mistaken closure of a bug report advocating for the removal of the warning. Subsequently, the warning remained in place despite its lack of a solid justification.
The Future of Abstract Static Methods
Fortunately, PHP 7 has finally removed the warning, as proposed in RFC: Reclassify E_STRICT notices. With its abolition, developers can once again utilize abstract static methods without encountering spurious warnings.
The above is the detailed content of Why Were Abstract Static Class Methods Abolished in PHP 5.2 ?. For more information, please follow other related articles on the PHP Chinese website!