Основы наследования в 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
.