Ich lerne PHP und fand ein überraschendes Verhalten, als ich versuchte herauszufinden, warum ein Konstruktor nicht aufgerufen wurde.
%Vor% Ich bin an Java gewöhnt, also dachte ich, das würde "Shape. Triangle" ausgeben. Überraschenderweise gibt es nur "Dreieck" aus. Ich suchte nach dem Problem und anscheinend kann ich es irgendwie reparieren, indem ich parent::__construct();
in die Kindklasse setze, aber das scheint nicht ideal zu sein. Kann ich irgendetwas an der Shape-Klasse tun, um sicherzustellen, dass untergeordnete Klassen immer den übergeordneten Konstruktor aufrufen? Muss ich wirklich parent::__construct();
in die Klasse jedes Kindes schreiben, wenn der Elternteil einen Konstruktor hat?
Wenn Sie eine Methode desselben Namens in einer untergeordneten Klasse definieren, wird die Methode des übergeordneten Elements außer Kraft gesetzt und unter keinen Umständen aufgerufen, sofern Sie dies nicht explizit tun. Ie .: Nein, Sie können nichts dagegen tun, Sie müssen parent::__constructor()
explizit aufrufen.
Ab PHP 5 können Sie das endgültige Keyword verwenden, um zu verhindern, dass eine übergeordnete Methode verwendet wird übersteuert werden.
%Vor% Sie können dies in Kombination mit einer vordefinierten Methode init()
verwenden, um sicherzustellen, dass Ihr übergeordneter Konstruktor aufgerufen wurde.
Dies würde
ausgeben %Vor% Es ist ratsam, nur ein Design wie dieses zu verwenden, wenn Sie dokumentieren, was die init()
-Methode tut und wo sie im Elternteil aufgerufen wird.
Tags und Links php inheritance constructor