Warum gibt dieser Code "BD" wieder? Ich bin überrascht, nachdem ich das bekommen habe. Ich lerne OOP-Konzepte und neue erweiterte PHP.
%Vor% Wenn Sie $d = new D();
aufrufen, wird der B
-Konstruktor aufgerufen (weil D
geerbt von C
und C
von B
geerbt) und wenn Sie $d->a();
aufrufen, die Methode a()
Ihrer Klasse D
wird aufgerufen und print D
, dann haben Sie als Ausgabe BD
.
Wenn PHP 5 für eine gegebene Klasse keine __construct()
-Funktion finden kann und die Klasse nicht von einer Elternklasse geerbt hat, sucht zur Rückwärtskompatibilität nach der alten Konstruktorfunktion Name der Klasse Effektiv bedeutet dies, dass der einzige Fall, der Kompatibilitätsprobleme hätte, wenn die Klasse eine Methode namens __construct()
hätte, die für verschiedene Semantiken verwendet wurde.
In Ihrem Fall haben Ihre Klasse A und Ihre Klasse B einen Konstruktor
Lesemodus bei:
Es gibt einen hässlichen Nebeneffekt. In einer früheren Version von PHP muss der Konstruktor der Klasse denselben Namen wie die Klasse selbst haben. Der Name unterscheidet nicht zwischen Groß- und Kleinschreibung . Bedeutung b
ist der Konstruktor von B
in Ihrem Fall. Da D
ein Kind von B
ist und D
keinen eigenen Konstruktor einführt, wird der Konstruktor von B
aufgerufen, der B
in der Ausgabe auslöst.
In modernen Versionen von PHP sollte der Konstruktor __construct()
heißen, um solche Probleme zu vermeiden. Sie können jedoch weiterhin den alten Mechanismus verwenden, aber es wird eine Benachrichtigung ausgelöst, wenn Ihre Fehlermeldungsstufe auf E_STRICT
gesetzt ist.
Tags und Links php constructor methods function oop