Ho un problema generale con questo caso d'uso: Ho una classe A
. Questa classe ha un metodo non astratto doStuffCallback()
che potrebbe essere sovrascritto ma non è necessario per ogni sottoclasse. Ma: voglio assicurarmi che se il metodo è sovrascritto, il metodo della sottoclasse deve chiamare il metodo dei genitori.OOP (PHP) - Forza il metodo sovrascritto per chiamare secondo metodo genitore
Esempio:
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
}
}
Poiché il metodo override fa la stessa cosa sarebbe molto brutto per definire due metodi per la stessa responsabilità e un aiutante-metodo privato che chiama entrambi. Così:
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
}
}
Questo è davvero brutto e laborioso. Quindi la mia domanda: C'è un modo in PHP per forzare i metodi sovrascritti a chiamare il metodo dei genitori?
Grazie per la tua risposta! Penso esattamente la stessa cosa. Credo che l'OOP che usiamo oggigiorno non sia ancora completo. Sono rimasti così tanti aspetti che sono importanti ma non gestiti. –