Kiedy unikać dziedziczenia?
Założenie: Przedstawimy sytuacje, w których dziedziczenie w PHP może być niekorzystne i zaproponujemy alternatywne rozwiązania.
Krok po kroku:
- Sytuacja 1: Słaba relacja “jest”
Załóżmy, że mamy klasę `Animal` i klasę `Car`. Chcemy dodać do `Car` metodę `makeSound()`. Relacja “Car jest Animalem” jest słaba. Dziedziczenie wprowadza niepotrzebne powiązanie.// Zły przykład - słaba relacja class Animal { public function makeSound() { echo "Generic animal sound\n"; } } class Car extends Animal { public function drive() { echo "Driving...\n"; } } $car = new Car(); $car->makeSound(); // Nie ma sensu w kontekście samochodu
Lepiej użyć kompozycji lub interfejsów.
- Sytuacja 2: Nadmierne powiązanie
Jeśli klasa potomna mocno zależy od szczegółów implementacji klasy nadrzędnej, zmiana w klasie nadrzędnej może wymagać zmian we wszystkich klasach potomnych. To jest oznaka nadmiernego powiązania.// Przykład nadmiernego powiązania class Database { public function connect() { ... } public function query($sql) { ... } } class User extends Database { public function getUser($id) { $this->connect(); // Zależność od szczegółów implementacji $result = $this->query("SELECT * FROM users WHERE id = $id"); ... } }
Rozważ użycie zależności iniekcji lub wzorca strategii.
- Alternatywy
Zamiast dziedziczenia, rozważ użycie kompozycji (klasa zawiera inne klasy jako pola) lub interfejsów (klasy implementują wspólny interfejs). To pozwala na luźniejsze powiązanie i większą elastyczność.
Ten przykład pokazuje podstawowe sytuacje, w których należy unikać dziedziczenia. Zachęcamy do dalszego zgłębiania tematu programowania obiektowego w PHP!