Why Static Abstract Methods Were Disallowed in PHP 5.2
In PHP 5.2, the introduction of strict warnings led to a flurry of standards warnings related to abstract static class methods. This change sparked the question: why shouldn't PHP allow abstract static functions?
The Reasoning Behind the Prohibition
Initially, the prohibition of abstract static methods in PHP 5.2 was due to the absence of late static bindings. At the time, code like the following would not behave as expected:
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();
Even when called as a method of the child class, the self::bar() call would refer to the bar() method of ParentClass. Without late static bindings, this limitation made abstract static methods essentially useless.
The Addition of Late Static Bindings
With the introduction of PHP 5.3, the static keyword allowed methods in parent classes to call static methods in child classes. This opened the door for a reasonable use of abstract static methods. Late static bindings addressed the previous limitation and made static abstract methods feasible.
The Flawed Rationale
Despite the introduction of late static bindings, the warning against abstract static functions persisted. The argument put forward was that calling ParentClass::foo() could expose a broken ParentClass::bar() method. However, this issue could be resolved by ensuring that abstract classes were not instantiated.
The Erroneous Decision
Despite the flawed rationale, the warning remained in PHP. A PHP bug report calling for its removal was incorrectly closed as "bogus." This erroneous decision has kept the warning in place, much to the frustration of developers.
The Future of Static Abstract Methods
Fortunately, the warning is set to be removed in PHP 7. This change will align PHP with modern object-oriented programming practices and allow developers to utilize abstract static methods without unnecessary warnings. Developers will no longer need to navigate the confusion caused by the flawed decision in PHP 5.2.
The above is the detailed content of Why Were Static Abstract Methods Disallowed in PHP 5.2 and What Changed in Later Versions?. For more information, please follow other related articles on the PHP Chinese website!