Повторение — калькулятор фигур
Часть раздела Объектно-ориентированное программирование путешествия по PHP на Coddy. Урок 32 из 91.
Задание
ЛегкоДавайте создадим калькулятор фигур, демонстрирующий возможности interface для создания гибкого и расширяемого кода. Вы создадите interface, определяющий контракт для вычисления площадей, а затем Implement его в разных классах фигур.
Вы организуете свой код в четырех файлах:
Calculable.php: Define interfaceCalculableс единственной сигнатурой method:calculateArea(). Этот контракт гарантирует, что любая вычислимая фигура может вычислить свою площадь.Rectangle.php: Create classRectangle, который implementsCalculable. Include файл interface. У класса должны быть private properties$widthи$height, устанавливаемые через constructor. ImplementcalculateArea(), чтобы Return площадь (width multiplied на height).Circle.php: Create classCircle, который также implementsCalculable. Include файл interface. У класса должно быть private property$radius, устанавливаемое через constructor. ImplementcalculateArea(), чтобы Return площадь с использованием formulapi() * radius * radius.main.php: Include оба файла фигур. Create function с именемdisplayArea, которая accepts parameter типаCalculableи имя фигуры (строка). function должна Print:"[name] area: [area]", причем area округляется до 2 десятичных знаков с использованиемnumber_format().
Вы получите четыре inputs: width прямоугольника, height прямоугольника, radius круга и имя фигуры для круга. Create Rectangle с width и height (преобразовав их в числа с плавающей точкой) и Circle с radius (преобразовав его в число с плавающей точкой). Call displayArea() дважды: сначала с прямоугольником, используя "Rectangle" как имя, затем с кругом, используя provided имя фигуры. Print каждый результат в отдельной строке.
function displayArea() работает с любой фигурой, которая implements Calculable. Ей не нужно знать, вычисляет ли она площадь прямоугольника, круга или любой будущей фигуры, которую вы можете добавить. В этом и заключается преимущество программирования через interface!
Попробуйте сами
<?php
// Подключить файлы фигур
require_once 'Rectangle.php';
require_once 'Circle.php';
// TODO: Создать функцию под названием displayArea
// Она должна принимать параметр Calculable и имя фигуры (string)
// Вывести: "[name] area: [area]", где area округлена до 2 знаков после запятой с помощью number_format()
// Прочитать входные данные
$width = floatval(trim(fgets(STDIN)));
$height = floatval(trim(fgets(STDIN)));
$radius = floatval(trim(fgets(STDIN)));
$circleName = trim(fgets(STDIN));
// TODO: Создать Rectangle с width и height
// TODO: Создать Circle с radius
// TODO: Вызвать displayArea() с прямоугольником, используя "Rectangle" в качестве имени
// TODO: Вызвать displayArea() с кругом, используя предоставленное имя фигуры
?>Все уроки раздела Объектно-ориентированное программирование
1Основы ООП
Внешние файлыВведение в ООПКлассы и объектыКлючевое слово $thisМетодыСвойстваКонструктор (__construct)Деструктор (__destruct)Повторение — простой калькулятор4Наследование
Основы наследованияКлючевое слово parent::Переопределение методовКлючевое слово finalАбстрактные классыПовторение — иерархия сотрудников7Инкапсуляция
Public, Protected, PrivateМодификаторы доступа подробноГеттеры и сеттерыСокрытие информацииПродвижение конструктора (8.0)Повторение — система учёта студентов2Пространства имён и автозагрузка
Введение в пространства имёнКлючевое слово useСтандарт автозагрузки PSR-4Автозагрузчик ComposerПовторение — структурированный проект5Интерфейсы и контракты
Введение в интерфейсыРеализация интерфейсовРеализация нескольких интерфейсовИнтерфейс и абстрактный классАннотация типов с интерфейсамиПовторение — калькулятор фигур8Магические методы
Введение в магические методы__toString и __debugInfo__get, __set, __isset, __unset__call и __callStatic__clone и клонирование объектов__serialize и __unserializeПовторение — пользовательская коллекция3Свойства классов
Свойства экземпляра и статические свойстваКонстанты в классахСтатические методы и свойстваПриватные и защищённые свойстваСвойства только для чтения (PHP 8.1)Повторение — менеджер банковского счёта6Полиморфизм
Повторение переопределения методовПолиморфизм через интерфейсыАннотации типов и объединённые типыПозднее статическое связываниеПовторение — обработчик платежей9Трейты
Введение в трейтыИспользование нескольких трейтовРазрешение конфликтов трейтовАбстрактные методы в трейтахТрейты и наследование12Паттерны проектирования, часть 1
Введение в паттерны проектированияПаттерн SingletonПаттерн FactoryПаттерн ObserverПаттерн StrategyПотренируйтесь самостоятельно: Онлайн-компилятор PHP