0Pricing
PHP Academy · Lekcja

Klasy i metody abstrakcyjne

Definiuj częściowo zaimplementowane klasy bazowe za pomocą słowa kluczowego abstract

Klasy i metody abstrakcyjne to bezpłatna lekcja PHP Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej PHP Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs PHP Academy zawiera 4 lekcji w sumie.

Wprowadzenie: klasy abstrakcyjne

Klasy abstrakcyjnej nie można bezpośrednio utworzyć jako instancji — jest ona szablonem. Metody abstrakcyjne deklarują sygnaturę bez implementacji, a klasy potomne muszą je zaimplementować.

Najważniejsze pojęcia

Najważniejsze pojęcia:

  • Deklaruje się ją za pomocą abstract class
  • Metody abstrakcyjne nie mają treści: abstract public function x();
  • Klasy potomne muszą zaimplementować wszystkie metody abstrakcyjne
  • Może zawierać zarówno metody abstrakcyjne, jak i konkretne

Definiowanie klasy abstrakcyjnej

Przykład:

<?php
abstract class Animal {
    public function __construct(protected string $name) {}

    // Must be implemented by each subclass
    abstract public function sound(): string;

    // Shared concrete method
    public function introduce(): string {
        return "I am {$this->name} and I say: " . $this->sound();
    }
}

Implementowanie metod abstrakcyjnych

Ciąg dalszy:

<?php
class Dog extends Animal {
    public function sound(): string { return 'Woof'; }
}

class Cat extends Animal {
    public function sound(): string { return 'Meow'; }
}

$animals = [new Dog('Rex'), new Cat('Whiskers')];
foreach ($animals as $a) {
    echo $a->introduce() . PHP_EOL;
}
// I am Rex and I say: Woof
// I am Whiskers and I say: Meow

Wzorzec Template Method

Więcej szczegółów:

<?php
abstract class DataProcessor {
    // Template method: defines the algorithm skeleton
    final public function process(array $data): array {
        $data = $this->validate($data);
        $data = $this->transform($data);
        return $this->format($data);
    }

    abstract protected function validate(array $data): array;
    abstract protected function transform(array $data): array;

    protected function format(array $data): array { return $data; }
}

Klasa abstrakcyjna a interfejs

Zastosowanie praktyczne:

<?php
// Use abstract class when:
// - Subclasses share implementation code
// - You need constructor logic or state

// Use interface when:
// - Defining a contract (no implementation needed)
// - Multiple inheritance of type is needed

// A class can only extend ONE abstract class
// but can implement MULTIPLE interfaces

Częściowa implementacja

Użycie zaawansowane:

<?php
abstract class Repository {
    // Concrete method available to all subclasses
    protected function findById(int $id, string $table): array {
        $stmt = $this->getDb()->prepare("SELECT * FROM $table WHERE id = ?");
        $stmt->execute([$id]);
        return $stmt->fetch(PDO::FETCH_ASSOC) ?: [];
    }

    abstract protected function getDb(): PDO;
    abstract public function find(int $id): array;
}

Wzorzec

Typowe wzorce wykorzystujące klasy abstrakcyjne pomagają w przejrzysty sposób rozwiązywać powtarzające się problemy projektowe. Należy stosować je konsekwentnie, aby kod był czytelny i łatwy w utrzymaniu.

Kiedy stosować

Wiedza o tym, kiedy stosować klasy abstrakcyjne, jest równie ważna jak wiedza o tym, jak to robić. Nadużywanie ich prowadzi do złożoności, a zbyt rzadkie stosowanie — do powielania kodu.

Przykład z praktyki

W rzeczywistych aplikacjach klasy abstrakcyjne często występują we frameworkach, ORM-ach i warstwach usług. Ich zrozumienie przygotuje Państwa do pracy nad profesjonalnymi projektami PHP.

Typowe pułapki

Unikaj tych błędów związanych z klasami abstrakcyjnymi:

  • Klasy abstrakcyjnych nie można utworzyć jako instancji za pomocą new
  • Wszystkie metody abstrakcyjne muszą zostać zaimplementowane w konkretnych klasach potomnych
  • Korzystaj ze wzorca Template Method do definiowania szkieletów algorytmów
  • Klasy abstrakcyjne mogą zawierać konstruktory, właściwości i metody konkretne

Szybkie sprawdzenie

Czy można bezpośrednio utworzyć instancję klasy abstrakcyjnej za pomocą „new”?

Podsumowanie: klasy abstrakcyjne

Podsumowanie:

  • Klasy abstrakcyjnych nie można utworzyć jako instancji za pomocą new
  • Wszystkie metody abstrakcyjne muszą zostać zaimplementowane w konkretnych klasach potomnych
  • Korzystaj ze wzorca Template Method do definiowania szkieletów algorytmów
  • Klasy abstrakcyjne mogą zawierać konstruktory, właściwości i metody konkretne

Często zadawane pytania

Czy lekcja „Klasy i metody abstrakcyjne” jest bezpłatna?

Tak — pełny tekst „Klasy i metody abstrakcyjne” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu PHP Academy, przejdź na CoddyKit PRO. Kurs PHP Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Klasy i metody abstrakcyjne”?

Definiuj częściowo zaimplementowane klasy bazowe za pomocą słowa kluczowego abstract Ćwiczysz PHP Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć PHP Academy?

Nie wymagamy żadnego doświadczenia. PHP Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.

Ile czasu zajmuje lekcja „Klasy i metody abstrakcyjne”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji PHP Academy?

Tak. Każda lekcja PHP Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Rozszerzanie klas za pomocą dziedziczenia
  2. Klasy i metody abstrakcyjne
  3. Implementowanie interfejsów
  4. Cechy do ponownego użycia kodu
← Powrót do PHP Academy