Home > Backend Development > PHP Tutorial > Why Were Static Abstract Methods Disallowed in PHP 5.2 and What Changed in Later Versions?

Why Were Static Abstract Methods Disallowed in PHP 5.2 and What Changed in Later Versions?

Susan Sarandon
Release: 2024-11-14 12:57:02
Original
1004 people have browsed it

Why Were Static Abstract Methods Disallowed in PHP 5.2 and What Changed in Later Versions?

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

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!

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