Ringkasan: Hierarki Karyawan
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan PHP di Coddy. Pelajaran 26 dari 91.
Tantangan
MudahMari buat sistem hierarki karyawan yang menggabungkan semua konsep pewarisan yang telah kamu pelajari di bab ini. Kamu akan membuat class dasar abstrak yang menentukan hal-hal yang harus dimiliki setiap karyawan, lalu mengembangkannya menjadi tipe karyawan khusus yang menghitung bonus dengan cara berbeda.
Kamu akan mengatur kodemu dalam empat file:
Employee.php: Definisikan class abstrakEmployeesebagai dasar untuk semua tipe karyawan. Class ini harus memiliki property protected$namedan$salary. Constructor menerima kedua nilai tersebut dan menetapkannya. Sertakan methodgetName()yang mengembalikan nama, methodgetSalary()yang mengembalikan gaji, dan method abstrakcalculateBonus()yang harus diimplementasikan oleh class turunan. Tambahkan juga methodgetSummary()yang mengembalikan"[name] earns $[salary] with bonus: $[bonus]", dengan[bonus]sebagai hasil pemanggilancalculateBonus().Manager.php: Definisikan classManageryang mewarisiEmployee. Sertakan file Employee di bagian atas. Manager menerima bonus berdasarkan persentase. Tambahkan property protected$bonusPercentage. Constructor harus menerima nama, gaji, dan persentase bonus: gunakanparent::__construct()untuk dua nilai pertama, lalu tetapkan sendiri persentasenya. ImplementasikancalculateBonus()agar mengembalikan hasil perkalian gaji dengan persentase bonus, lalu dibagi 100.Developer.php: Definisikan classDeveloperyang mewarisiEmployee. Sertakan file Employee di bagian atas. Developer menerima bonus tetap untuk penyelesaian proyek. Tambahkan property protected$projectBonus. Constructor harus menerima nama, gaji, dan jumlah bonus proyek: gunakanparent::__construct()untuk dua nilai pertama, lalu tetapkan sendiri bonus proyeknya. ImplementasikancalculateBonus()agar langsung mengembalikan jumlah bonus proyek yang tetap.main.php: Sertakan file Manager dan Developer. Kamu akan menerima enam input: nama manager, gaji manager, persentase bonus manager, nama developer, gaji developer, dan bonus proyek developer. BuatManagerdanDevelopermenggunakan nilai-nilai tersebut. Cetak hasil pemanggilangetSummary()pada manager terlebih dahulu, lalu pada developer, masing-masing di baris tersendiri.
Tantangan ini menunjukkan bagaimana class abstrak menegakkan kontrak: setiap karyawan harus dapat menghitung bonusnya, tetapi logika penghitungannya berbeda-beda sesuai peran. Manager menggunakan persentase dari gajinya, sedangkan Developer menerima jumlah tetap. Method bersama getSummary() di class induk dapat bekerja dengan lancar dengan kedua perhitungan bonus melalui polimorfisme.
Coba sendiri
<?php
require_once 'Manager.php';
require_once 'Developer.php';
// Baca input
$managerName = trim(fgets(STDIN));
$managerSalary = floatval(trim(fgets(STDIN)));
$managerBonusPercentage = floatval(trim(fgets(STDIN)));
$developerName = trim(fgets(STDIN));
$developerSalary = floatval(trim(fgets(STDIN)));
$developerProjectBonus = floatval(trim(fgets(STDIN)));
// TODO: Buat object Manager dengan input manajer
// TODO: Buat object Developer dengan input pengembang
// TODO: Cetak ringkasan manajer (getSummary())
// TODO: Cetak ringkasan pengembang (getSummary())
?>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