Methods with the same name as their class will not be constructors in a future version of PHP

27. April 2017 · Programmierung · andreas · Kein Kommentar

Mit PHP 4 wurden Konstruktoren eingeführt, welche den gleichen Namen haben wie die Klasse, in der sie definiert wurden:

class tolleKlasse {

    function tolleKlasse() {
    
        // ...
    }
}

In PHP 5 wurden diese Konstruktoren beibehalten, gleichzeitig aber mit der Methode

__construct()

eine neue Art der Konstruktor-Definition eingeführt. Seit PHP 7 wird bei der Verwendung von PHP 4 Konstruktoren nun die Warnung “Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP” ausgegeben, die darauf hinweist, daß ab PHP 8 die gleichnamigen Methoden nur noch als normale Methoden, nicht aber als Konstuktoren behandelt werden.

Um vorhandenen Code fit für die Zukunft zu machen, reicht es, den Namen der Funktion zu ersetzen:

class tolleKlasse {

    function __construct() {
    
        // ...
    }
}

Da hierdurch vorhandener Code, welcher z.B. im Rahmen einer Vererbung auf den Funktionsnamen des Konstuktors zugreift, in einen Fehler läuft, kann nach dem Konstruktor eine zweite Methode mit dem ursprünglichen Funktionsnamen angelegt werden, welche den eigentlichen Konstruktor aufruft.