Kann ich eine Kindklasse zwingen, den Konstruktor der Eltern zu verwenden?

8

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?

    
Plain Jane 08.11.2010, 03:45
quelle

3 Antworten

10

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.

    
deceze 08.11.2010, 03:48
quelle
8

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.

%Vor%

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.

    
MirroredFate 25.03.2015 00:18
quelle
2

Laut PHP-Handbuch:

%Vor%     
stillstanding 08.11.2010 06:06
quelle

Tags und Links