Ich habe ein generelles Problem mit diesem Anwendungsfall: Ich habe eine Klasse A
. Diese Klasse hat eine nicht abstrakte Methode doStuffCallback()
, die überschrieben werden könnte, aber es ist nicht für jede Unterklasse erforderlich. Aber: Ich möchte sicherstellen, dass, wenn die Methode überschrieben wird, die Unterklasse-Methode die Eltern-Methode aufrufen muss.OOP (PHP) - Force überschrieben Methode zum Aufruf der entsprechenden Eltern-Methode
Beispiel:
abstract class A {
private function doStuff() {
$this->doStuffCallback();
}
protected function doStuffCallback() {
// IMPORTANT CODE HERE
}
}
class B extends A {
protected function doStuffCallback() {
parent::doStuffCallback(); // I want to enforce this because the parents method code is important
// ALSO IMPORTANT CODE
}
}
Da die überschriebene Methode die gleiche Sache tut es sehr hässlich sein würde zwei Methoden für die gleiche Verantwortung und eine private Helfer-Methode, die beiden Anrufe zu definieren. Gefällt mir:
abstract class A {
private function doStuff() {
$this->callDoStuffCallback();
}
private function callDoStuffCallback() {
$this->internalDoStuffCallback();
$this->doStuffCallback();
// This is VERY ugly
}
private function internalDoStuffCallback() {
// IMPORTANT CODE HERE
}
protected function doStuffCallback() {}
}
class B extends A {
protected function doStuffCallback() {
// IMPORTANT CODE
}
}
Das ist wirklich hässlich und mühsam. Also meine Frage: Gibt es einen Weg in PHP, um überschriebene Methoden zum Aufruf der Eltern-Methode zu erzwingen?
Danke für Ihre Antwort! Ich denke genau dasselbe. Ich glaube, dass die OOP, die wir heute benutzen, noch nicht vollständig ist. Es gibt so viele Aspekte, die wichtig sind, aber nicht behandelt werden. –