Tworzenie stron internetowych - poradnik
Metody abstrakcyjne są używane, aby zmusić klasę pochodną do implementowania określonej funkcjonalności. Dzięki temu można zagwarantować, że klasa pochodna będzie posiadała określoną funkcjonalność, niezależnie od tego, jak jest ona implementowana. Metody abstrakcyjne są również przydatne w przypadku tworzenia hierarchii klas, ponieważ pozwalają na zdefiniowanie podstawowego zachowania, które musi być implementowane przez wszystkie klasy pochodne.
Jednym z głównych celów używania metod abstrakcyjnych jest zapewnienie wysokiego poziomu abstrakcji w kodzie, co pozwala na unikanie duplikacji kodu i ułatwienie jego rozszerzania i utrzymania.
Metody abstrakcyjne są również przydatne do tworzenia projektów zorientowanych obiektowo, gdzie klasa jest odpowiedzialna za określoną funkcjonalność, a metoda abstrakcyjna jest wykorzystywana do zapewnienia, że klasa pochodna będzie zawierać tę funkcjonalność.
Interfejsy służą do tego samego celu, jednak ponieważ interfejsy zawierają tylko deklaracje metod i nie mają implementacji, są one często używane do definiowania zestawów metod, które powinny być implementowane przez różne klasy, które są ze sobą powiązane, ale które mogą mieć różne implementacje.
W języku PHP istnieje kilka sposobów implementowania abstrakcyjnych klas i metod.
Jednym z nich jest użycie słowa kluczowego „abstract” przed słowem „class” lub „method” w deklaracji klasy lub metody. Klasa abstrakcyjna nie może być bezpośrednio tworzona za pomocą operatora „new”, ale musi być rozszerzana przez inne klasy. Metoda abstrakcyjna nie ma ciała, co oznacza, że musi zostać nadpisana przez klasę pochodną.
Przykład:
abstract class Shape {
abstract protected function getArea();
}
class Rectangle extends Shape {
protected $width;
protected $height;
public function getArea() {
return $this->width * $this->height;
}
}
$rectangle = new Rectangle();
$rectangle->width = 4;
$rectangle->height = 5;
echo $rectangle->getArea(); // 20
Interfejsy są drugi sposób w PHP, które pozwala na abstrakcyjne metody, i zawiera tylko deklaracje metod, nie ma implementacji , klasy implementujące interfejsy muszą zaimplementować wszystkie metody z interfejsu.
interface Shape {
public function getArea();
}
class Rectangle implements Shape {
protected $width;
protected $height;
public function getArea() {
return $this->width * $this->height;
}
}
Należy pamiętać, że klasa może implementować wiele interfejsów , a klasa abstrakcyjna może dziedziczyć po innej abstrakcyjnej klasie.
Klasa abstrakcyjna i interfejs to dwa różne sposoby implementowania abstrakcji w języku PHP. Oto kilka głównych różnic między nimi:
Warto wziąć pod uwagę, że te różnice pozwalają na inne użycie abstrakcji. Klasa abstrakcyjna jest używana, gdy potrzebujemy stworzyć hierarchie klas, które będą dziedziczyć po niej podobieństwa, Interfejsy natomiast służą do zapewnienia zestandaryzowanego zestawu metod, dla różnych klas, które mogą być ze sobą związane.