Interfejsy vs klasy abstrakcyjne

Założenie: Zrozumieć różnice i podobieństwa między interfejsami a klasami abstrakcyjnymi w PHP oraz kiedy stosować które rozwiązanie.

Krok po kroku:

  1. Interfejs: Zdefiniujmy prosty interfejs reprezentujący kształt geometryczny.
  2. 
    interface Shape {
      public function getArea();
      public function getPerimeter();
    }
    				

    Ten kod definiuje interfejs Shape z metodami getArea() i getPerimeter(). Klasy implementujące ten interfejs muszą zaimplementować te metody.

  3. Klasa implementująca interfejs: Stwórzmy klasę Circle implementującą interfejs Shape.
  4. 
    class Circle implements Shape {
      private $radius;
    
      public function __construct($radius) {
        $this->radius = $radius;
      }
    
      public function getArea() {
        return pi() * $this->radius * $this->radius;
      }
    
      public function getPerimeter() {
        return 2 * pi() * $this->radius;
      }
    }
    				

    Klasa Circle implementuje metody zdefiniowane w interfejsie Shape. Musimy zdefiniować metody getArea() i getPerimeter() dla koła.

  5. Klasa abstrakcyjna: Zdefiniujmy klasę abstrakcyjną Animal.
  6. 
    abstract class Animal {
      abstract public function makeSound();
      public function eat() {
        echo "Animal is eating\n";
      }
    }
    				

    Klasa Animal jest abstrakcyjna, co oznacza, że nie można utworzyć jej instancji. Metoda makeSound() jest abstrakcyjna i musi być zaimplementowana przez klasy dziedziczące.

  7. Klasa dziedzicząca po klasie abstrakcyjnej: Stwórzmy klasę Dog dziedziczącą po klasie Animal.
  8. 
    class Dog extends Animal {
      public function makeSound() {
        echo "Woof!\n";
      }
    }
    				

    Klasa Dog dziedziczy po klasie abstrakcyjnej Animal i implementuje abstrakcyjną metodę makeSound().

Ten przykład pokazuje podstawowe różnice między interfejsami a klasami abstrakcyjnymi. Interfejsy definiują kontrakt, który klasy muszą spełnić, podczas gdy klasy abstrakcyjne pozwalają na częściową implementację i dziedziczenie.

Zachęcamy do dalszego zgłębiania tematu programowania obiektowego w PHP!

Dodaj komentarz 0

Your email address will not be published. Required fields are marked *