Sobes.tech
Junior — Middle

Cum se diferențiază o clasă abstractă de o interfață în programarea orientată pe obiecte?

sobes.tech AI

Răspuns de la AI

O clasă abstractă și o interfață în PHP au următoarele diferențe:

  • Clasa abstractă poate conține metode abstracte (fără implementare), precum și metode cu implementare și proprietăți.

  • Interfața conține doar declarații de metode (începând cu PHP 8, se pot adăuga implementări implicite, dar aceasta este o caracteristică), nu conține stare (proprietăți).

  • O clasă poate moșteni doar o clasă abstractă, dar poate implementa mai multe interfețe.

  • Clasa abstractă este utilizată atunci când trebuie să se definească o implementare de bază și un contract general, în timp ce interfața este utilizată atunci când trebuie să se definească doar un contract fără implementare.

Exemplu:

abstract class Animal {
    abstract public function makeSound();
    public function sleep() {
        echo "Dormind";
    }
}

interface CanFly {
    public function fly();
}

class Bird extends Animal implements CanFly {
    public function makeSound() {
        echo "Ciripit";
    }
    public function fly() {
        echo "Zburând";
    }
}

Astfel, clasa abstractă stabilește o implementare parțială, iar interfața doar contractul.