Info
Відкрити сторінку на телефоні

Розкажіть про абстрактний клас і чим він відрізняється від інтерфейсу?

У PHP абстрактний клас - це клас, який не може бути створений самостійно, а лише використовується як базовий клас для інших класів. Абстрактний клас може містити абстрактні методи (методи без реалізації), які повинні бути реалізовані в дочірніх класах.

Ось приклад абстрактного класу в PHP:

                        
abstract class Shape {
    abstract public function calculateArea();
}

class Circle extends Shape {
    private $radius;

    public function __construct($radius) {
        $this->radius = $radius;
    }

    public function calculateArea() {
        return pi() * $this->radius * $this->radius;
    }
}

class Square extends Shape {
    private $side;

    public function __construct($side) {
        $this->side = $side;
    }

    public function calculateArea() {
        return $this->side * $this->side;
    }
}
                        
                    

Інтерфейс в PHP визначає контракт, який клас повинен виконати. Інтерфейс може включати в себе лише методи без реалізації. Клас, який імплементує інтерфейс, повинен надати реалізації всіх методів, визначених в інтерфейсі.

Ось приклад використання інтерфейсу в PHP:

                        
interface Shape {
    public function calculateArea();
}

class Circle implements Shape {
    private $radius;

    public function __construct($radius) {
        $this->radius = $radius;
    }

    public function calculateArea() {
        return pi() * $this->radius * $this->radius;
    }
}

class Square implements Shape {
    private $side;

    public function __construct($side) {
        $this->side = $side;
    }

    public function calculateArea() {
        return $this->side * $this->side;
    }
}
                        
                    

Отже, основна відмінність між абстрактним класом і інтерфейсом в PHP полягає в тому, що абстрактний клас може мати реалізовані методи та властивості, а також може бути використаний для створення об'єктів (хоча сам по собі він абстрактний), тоді як інтерфейс може містити лише недореалізовані методи та не може бути використаний для створення об'єктів.