Rekap: Kalkulator Bentuk
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan PHP di Coddy. Pelajaran 32 dari 91.
Tantangan
MudahMari kita buat kalkulator bentuk yang menunjukkan kekuatan interface untuk membuat kode yang fleksibel dan mudah diperluas. Kamu akan membuat interface yang mendefinisikan kontrak untuk menghitung luas, lalu menerapkannya pada berbagai class bentuk.
Kamu akan menyusun kodemu dalam empat file:
Calculable.php: Definisikan interfaceCalculabledengan satu deklarasi method:calculateArea(). Kontrak ini memastikan setiap bentuk yang dapat dihitung bisa menghitung luasnya.Rectangle.php: Buat classRectangleyang mengimplementasikanCalculable. Sertakan file interface. Class ini harus memiliki property privat$widthdan$height, yang nilainya ditetapkan melalui constructor. ImplementasikancalculateArea()untuk mengembalikan luasnya (lebar dikalikan tinggi).Circle.php: Buat classCircleyang juga mengimplementasikanCalculable. Sertakan file interface. Class ini harus memiliki property privat$radius, yang nilainya ditetapkan melalui constructor. ImplementasikancalculateArea()untuk mengembalikan luas menggunakan rumuspi() * radius * radius.main.php: Sertakan kedua file bentuk. Buat fungsi bernamadisplayAreayang menerima parameterCalculabledan nama bentuk (string). Fungsi ini harus mencetak:"[name] area: [area]", dengan luas dibulatkan hingga 2 angka desimal menggunakannumber_format().
Kamu akan menerima empat input: lebar persegi panjang, tinggi persegi panjang, radius lingkaran, dan nama bentuk untuk lingkaran. Buat Rectangle dengan lebar dan tinggi (konversikan ke float), serta Circle dengan radius (konversikan ke float). Panggil displayArea() dua kali: pertama dengan persegi panjang menggunakan "Rectangle" sebagai nama, lalu dengan lingkaran menggunakan nama bentuk yang diberikan. Cetak setiap hasil pada barisnya sendiri.
Fungsi displayArea() dapat digunakan dengan bentuk apa pun yang mengimplementasikan Calculable. Fungsi ini tidak perlu mengetahui apakah luas yang dihitung adalah luas persegi panjang, lingkaran, atau bentuk lain yang mungkin kamu tambahkan nanti. Itulah keunggulan pemrograman berdasarkan interface!
Coba sendiri
<?php
// Sertakan file bentuk
require_once 'Rectangle.php';
require_once 'Circle.php';
// TODO: Buat fungsi bernama displayArea
// Fungsi ini harus menerima parameter Calculable dan nama bentuk (string)
// Cetak: "[name] area: [area]", dengan luas dibulatkan menjadi 2 angka di belakang koma menggunakan number_format()
// Baca input
$width = floatval(trim(fgets(STDIN)));
$height = floatval(trim(fgets(STDIN)));
$radius = floatval(trim(fgets(STDIN)));
$circleName = trim(fgets(STDIN));
// TODO: Buat Rectangle dengan lebar dan tinggi
// TODO: Buat Circle dengan jari-jari
// TODO: Panggil displayArea() dengan persegi panjang, menggunakan "Rectangle" sebagai namanya
// TODO: Panggil displayArea() dengan lingkaran, menggunakan nama bentuk yang diberikan
?>Semua pelajaran di Pemrograman Berorientasi Objek
1Dasar-Dasar OOP
File EksternalPengenalan OOPclass vs objectKata Kunci $thismethodpropertyConstructor (__construct)Destructor (__destruct)Ringkasan: Kalkulator Sederhana4Pewarisan
Pewarisan DasarKata Kunci parent::Penimpaan methodKata Kunci finalClass AbstrakRingkasan: Hierarki Karyawan7Enkapsulasi
Public, Protected, PrivateModifier Akses secara MendalamGetter dan SetterPenyembunyian InformasiPromosi Constructor (8.0)Ulasan: Sistem Catatan Siswa2Namespace dan Autoloading
Pengenalan NamespaceKata Kunci useStandar Autoloading PSR-4Autoloader ComposerRingkasan: Proyek yang Terorganisasi5Interface dan Kontrak
Pengenalan InterfaceMengimplementasikan InterfaceImplementasi Beberapa InterfaceInterface vs Abstract ClassPetunjuk Tipe dengan InterfaceRekap: Kalkulator Bentuk8Magic Methods
Pengantar Magic Methods__toString & __debugInfo__get, __set, __isset, __unset__call & __callStatic__clone & Cloning Object__serialize & __unserializeRingkasan: Koleksi Kustom11Sistem Tipe Data dan Penanganan Error
Deklarasi TipeTipe NullableTipe Union dan IntersectionClass ExceptionHierarki Exception KustomTry, Catch, FinallyRekap: Validator Form3Property dalam class
Property instance vs staticKonstanta dalam classMethod & property staticProperty private & protectedProperty readonly (PHP 8.1)Ulasan: Pengelola Rekening Bank6Polimorfisme
Meninjau Kembali Method OverridingPolimorfisme melalui AntarmukaPetunjuk Tipe dan Tipe UnionPengikatan Statis TertundaRangkuman: Pemroses PembayaranLatihan sendiri: Compiler PHP online