Наследование в PHP: Как работает наследование

Наследование в PHP: Как работает наследование

05.04.2023
328
Наследование позволяет создавать новые классы на основе существующих, при этом наследуя их свойства и методы. В PHP наследование реализуется с помощью ключевого слова "extends"

Основы наследования в PHP

При создании нового класса, который наследует свойства и методы уже существующего, мы используем ключевое слово extends. Например, допустим у нас есть класс Vehicle с некоторыми методами, а также класс Car, который наследует свойства и методы от класса Vehicle. Вот как это выглядит в коде:

class Vehicle {
  public function move() {
    echo "The vehicle is moving."; // выводится сообщение "The vehicle is moving."
  }
}

class Car extends Vehicle {
  public function honk() {
    echo "Beep beep!"; // выводится сообщение "Beep beep!"
  }
}

$car = new Car();
$car->move(); // Результат: The vehicle is moving.
$car->honk(); // Результат: Beep beep!

В этом примере мы создали два класса - Vehicle и Car. Car наследует свойства и методы от Vehicle. Класс Car имеет свой собственный метод honk(), который выводит на экран сообщение Beep beep!.

Переопределение методов

Когда класс наследует методы от другого класса, он может переопределить их, если это необходимо. Например, допустим у нас есть класс Animal с методом speak(), который выводит на экран звук, издаваемый животным. Мы создаем класс Dog, который наследует метод speak() от класса Animal. Однако, поскольку у собаки звук лай, а не просто звук, мы можем переопределить метод speak() для класса Dog:

class Animal {
  public function speak() {
    echo "The animal makes a sound."; // выводится сообщение "The animal makes a sound."
  }
}

class Dog extends Animal {
  public function speak() {
    echo "The dog barks."; // выводится сообщение "The dog barks."
  }
}

$animal = new Animal();
$animal->speak(); // Результат: The animal makes a sound.

$dog = new Dog();
$dog->speak(); // Результат: The dog barks.

Абстрактные классы

Абстрактный класс - это класс, который не может быть создан напрямую, а может только наследоваться другими классами. В PHP абстрактный класс обозначается ключевым словом abstract. Абстрактные классы могут содержать абстрактные методы, которые не имеют реализации. Эти методы должны быть реализованы в классах-наследниках. Вот пример:

abstract class Shape {
  abstract public function getArea(); // объявление абстрактного метода
}

class Square extends Shape {
  private $sideLength;

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

  public function getArea() {
    return pow($this->sideLength, 2); // вычисление площади квадрата
  }
}

$square = new Square(5);
echo $square->getArea(); // Результат: 25

В этом примере класс Shape - абстрактный класс, который имеет только один абстрактный метод getArea(). Класс Square наследует свойства и методы от класса Shape и реализует метод getArea(), который вычисляет площадь квадрата.

Заключение

Наследование - это мощный инструмент, который позволяет создавать более сложные иерархии классов в объектно-ориентированном программировании. В PHP наследование реализуется с помощью ключевого слова extends.