Podsumowanie — kalkulator kształtów
Część sekcji Programowanie obiektowe ścieżki PHP w Coddy. Lekcja 32 z 91.
Wyzwanie
ŁatwyZbudujmy kalkulator kształtów, który pokaże, jak interfejsy pomagają tworzyć elastyczny i rozszerzalny kod. Utworzysz interfejs definiujący kontrakt obliczania pól, a następnie zaimplementujesz go w różnych klasach kształtów.
Podzielisz kod na cztery pliki:
Calculable.php: Zdefiniuj interfejsCalculablez jedną sygnaturą metody:calculateArea(). Ten kontrakt zapewnia, że każdy kształt, którego pole można obliczyć, będzie potrafił je wyznaczyć.Rectangle.php: Utwórz klasęRectangle, która implementuje interfejsCalculable. Dołącz plik z interfejsem. Klasa powinna mieć prywatne właściwości$widthi$height, ustawiane przez konstruktor. ZaimplementujcalculateArea(), aby zwracała pole (szerokość pomnożoną przez wysokość).Circle.php: Utwórz klasęCircle, która również implementuje interfejsCalculable. Dołącz plik z interfejsem. Klasa powinna mieć prywatną właściwość$radius, ustawianą przez konstruktor. ZaimplementujcalculateArea(), aby zwracała pole obliczone według wzorupi() * radius * radius.main.php: Dołącz oba pliki z kształtami. Utwórz funkcję o nazwiedisplayArea, która przyjmuje parametr typuCalculableoraz nazwę kształtu (ciąg znaków). Funkcja powinna wypisać:"[name] area: [area]", zaokrąglając pole do 2 miejsc po przecinku za pomocąnumber_format().
Otrzymasz cztery dane wejściowe: szerokość prostokąta, wysokość prostokąta, promień koła i nazwę kształtu dla koła. Utwórz obiekt Rectangle z szerokością i wysokością (przekonwertuj je na liczby zmiennoprzecinkowe) oraz obiekt Circle z promieniem (przekonwertuj go na liczbę zmiennoprzecinkową). Wywołaj displayArea() dwa razy: najpierw dla prostokąta, używając "Rectangle" jako nazwy, a następnie dla koła, używając podanej nazwy kształtu. Wypisz każdy wynik w osobnym wierszu.
Funkcja displayArea() działa z każdym kształtem, który implementuje interfejs Calculable. Nie musi wiedzieć, czy oblicza pole prostokąta, koła, czy dowolnego przyszłego kształtu, który możesz dodać. Na tym polega piękno programowania opartego na interfejsie!
Spróbuj swoich sił
<?php
// Dołącz pliki figur
require_once 'Rectangle.php';
require_once 'Circle.php';
// TODO: Utwórz funkcję o nazwie displayArea
// Powinna przyjmować parametr typu Calculable oraz nazwę figury (string)
// Wypisz: "[name] area: [area]", gdzie pole jest zaokrąglone do 2 miejsc po przecinku za pomocą number_format()
// Odczytaj dane wejściowe
$width = floatval(trim(fgets(STDIN)));
$height = floatval(trim(fgets(STDIN)));
$radius = floatval(trim(fgets(STDIN)));
$circleName = trim(fgets(STDIN));
// TODO: Utwórz obiekt Rectangle o podanej szerokości i wysokości
// TODO: Utwórz obiekt Circle o podanym promieniu
// TODO: Wywołaj displayArea() dla prostokąta, używając "Rectangle" jako nazwy
// TODO: Wywołaj displayArea() dla koła, używając podanej nazwy figury
?>Wszystkie lekcje w sekcji Programowanie obiektowe
1Podstawy programowania obiektowego
Pliki zewnętrzneWprowadzenie do programowania obiektowegoKlasy a obiektySłowo kluczowe $thisMetodyWłaściwościKonstruktor (__construct)Destruktor (__destruct)Powtórka — prosty kalkulator4Dziedziczenie
Podstawy dziedziczeniaSłowo kluczowe parent::Przesłanianie metodSłowo kluczowe finalKlasy abstrakcyjnePowtórzenie – hierarchia pracowników7Enkapsulacja
Public, protected, privateModyfikatory dostępu w szczegółachGettery i setteryUkrywanie informacjiPromocja parametrów konstruktora (8.0)Podsumowanie — system ewidencji studentów2Przestrzenie nazw i autoloading
Wprowadzenie do przestrzeni nazwSłowo kluczowe useStandard autoloadingu PSR-4Autoloader ComposeraPodsumowanie – uporządkowany projekt5Interfejsy i kontrakty
Wprowadzenie do interfejsówImplementowanie interfejsówImplementowanie wielu interfejsówInterfejs a klasa abstrakcyjnaPodpowiadanie typów za pomocą interfejsówPodsumowanie — kalkulator kształtów8Metody magiczne
Wprowadzenie do metod magicznych__toString i __debugInfo__get, __set, __isset, __unset__call i __callStatic__clone i klonowanie obiektów__serialize i __unserializePodsumowanie — własna kolekcja11System typów i obsługa błędów
Deklaracje typówTypy nullableTypy sumy i przecięciaKlasy wyjątkówNiestandardowa hierarchia wyjątkówTry, Catch, FinallyPodsumowanie — walidator formularzy14Projekt: Zarządzanie biblioteką
Przegląd projektuKlasy książki i użytkownika3Właściwości klas
Właściwości instancji a właściwości statyczneStałe w klasachMetody i właściwości statyczneWłaściwości prywatne i chronioneWłaściwości tylko do odczytu (PHP 8.1)Podsumowanie — menedżer kont bankowych6Polimorfizm
Ponowne omówienie nadpisywania metodPolimorfizm za pomocą interfejsówPodpowiedzi typów i typy sumyPóźne wiązanie statycznePodsumowanie — procesor płatności9Cechy
Wprowadzenie do cechKorzystanie z wielu cechRozwiązywanie konfliktów cechMetody abstrakcyjne w cechachCechy a dziedziczenie12Wzorce projektowe, część 1
Wprowadzenie do wzorców projektowychWzorzec SingletonWzorzec FactoryWzorzec ObserverWzorzec StrategyPoćwicz samodzielnie: Kompilator PHP online