Tôi gặp vấn đề chung với trường hợp sử dụng này: Tôi có một lớp A
. Lớp này có phương thức không trừu tượng doStuffCallback()
có thể bị ghi đè nhưng không cần thiết cho mọi lớp con. Nhưng: Tôi muốn đảm bảo rằng nếu phương pháp được overriden subclass-method phải gọi phương thức cha mẹ.OOP (PHP) - Buộc phương thức ghi đè để gọi theo phương thức gốc
Ví dụ:
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
}
}
Bởi vì phương pháp ghi đè làm điều tương tự nó sẽ rất xấu xí để xác định hai phương pháp cho trách nhiệm tương tự và một helper-method private trong đó kêu gọi cả hai. Như thế này:
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
}
}
Điều này thực sự xấu và mất thời gian. Vì vậy, câu hỏi của tôi: Có cách nào trong PHP để buộc các phương pháp overriden để gọi phương pháp cha mẹ?
Cảm ơn câu trả lời của bạn! Tôi nghĩ chính xác như vậy. Tôi tin rằng OOP chúng tôi sử dụng hiện nay chưa hoàn thành. Có rất nhiều khía cạnh còn lại quan trọng nhưng không được xử lý. –