Для лучшего понимания принципа рассмотрим пример. Допустим, у нас есть базовый класс Animal
и производные от него классы Cat
и Dog
. Класс Animal
объявляет метод makeSound()
, который возвращает строку с звуком, издаваемым животным.
// Базовый класс Animal
class Animal {
// Метод makeSound() возвращает строку с звуком животного
public function makeSound(): string {
return 'Some sound';
}
}
// Производный класс Cat
class Cat extends Animal {
// Метод makeSound() переопределяется и возвращает "Meow"
public function makeSound(): string {
return 'Meow';
}
}
// Производный класс Dog
class Dog extends Animal {
// Метод makeSound() переопределяется и возвращает "Woof"
public function makeSound(): string {
return 'Woof';
}
}
Теперь допустим, что у нас есть функция makeAllSounds()
, которая должна выводить звуки всех животных в массиве.
// Функция makeAllSounds() принимает массив объектов класса Animal
function makeAllSounds(array $animals): void {
// Проходимся по каждому объекту в массиве
foreach ($animals as $animal) {
// Вызываем метод makeSound() на каждом объекте и выводим результат на экран
echo $animal->makeSound() . PHP_EOL;
}
}
Используя принцип подстановки Барбары Лисков, мы можем передавать в эту функцию массив объектов любого класса, производного от Animal
, и она будет работать корректно. Например:
// Создаем массив объектов разных типов
$animals = [
new Cat(),
new Dog(),
new Cat(),
new Cat(),
new Dog()
];
// Вызываем функцию makeAllSounds() с массивом объектов
makeAllSounds($animals);
Заключение
Принцип подстановки Барбары Лисков является важным принципом объектно-ориентированного программирования. Его соблюдение позволяет создавать гибкую, расширяемую и легко поддерживаемую программу. При разработке приложений на PHP необходимо учитывать этот принцип, чтобы создавать более качественный и надежный код.