Mengimplementasikan Interface
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan PHP di Coddy. Pelajaran 28 dari 91.
Sekarang setelah kamu memahami apa itu interface, mari kita lihat cara mengimplementasikannya. Sebuah class mengimplementasikan interface menggunakan kata kunci implements, dan harus menyediakan implementasi konkret untuk semua method yang dideklarasikan dalam interface tersebut.
<?php
interface Printable {
public function print();
}
class Document implements Printable {
private $content;
public function __construct($content) {
$this->content = $content;
}
public function print() {
return "Printing: " . $this->content;
}
}
$doc = new Document("Hello World");
echo $doc->print();
Output:
Printing: Hello Worldclass Document mengimplementasikan Printable dengan menyediakan versinya sendiri dari method print(). Jika kamu lupa mengimplementasikan method yang diwajibkan, PHP akan menampilkan error fatal.
Class yang berbeda dapat mengimplementasikan interface yang sama dengan caranya masing-masing:
<?php
class Invoice implements Printable {
private $amount;
public function __construct($amount) {
$this->amount = $amount;
}
public function print() {
return "Invoice Total: $" . $this->amount;
}
}
$invoice = new Invoice(150);
echo $invoice->print();
Output:
Invoice Total: $150Document dan Invoice sama-sama memenuhi kontrak Printable, tetapi masing-masing menangani pencetakan dengan cara berbeda sesuai tujuannya.
Poin Utama: Gunakan implements untuk menghubungkan class dengan interface, lalu definisikan semua method yang diwajibkan. Setiap class yang mengimplementasikan interface menyediakan logikanya sendiri sekaligus menjamin bahwa semua tanda tangan method yang sama tersedia.
Tantangan
MudahMari kita buat sistem pesan yang menunjukkan cara berbagai class dapat menerapkan interface yang sama dengan caranya masing-masing.
Kamu akan membuat tiga file yang bekerja bersama untuk menangani berbagai jenis pesan:
Messageable.php: Definisikan interfaceMessageabledengan dua signature method:compose($content)dandeliver(). Interface ini menetapkan kontrak yang harus diikuti semua jenis pesan.Email.php: Buat classEmailyang menerapkanMessageable. Sertakan file interface di bagian atas. Class ini harus memiliki property privat$recipientdan property privat$body. Constructor menerima alamat penerima. Terapkancompose($content)untuk menyimpan konten di$bodydan mengembalikan"Email composed". Terapkandeliver()untuk mengembalikan"Email to [recipient]: [body]".SMS.php: Buat classSMSyang juga menerapkanMessageable. Sertakan file interface di bagian atas. Class ini harus memiliki property privat$phoneNumberdan property privat$text. Constructor menerima nomor telepon. Terapkancompose($content)untuk menyimpan konten di$textdan mengembalikan"SMS composed". Terapkandeliver()untuk mengembalikan"SMS to [phoneNumber]: [text]".
Di main.php, sertakan file Email dan SMS. Kamu akan menerima tiga input: alamat email, nomor telepon, dan konten pesan. Buat object Email dengan alamat email dan object SMS dengan nomor telepon. Panggil compose() dengan konten pesan pada kedua object, lalu cetak setiap hasil pada barisnya sendiri. Setelah itu, panggil deliver() pada kedua object, lalu cetak setiap hasil pada barisnya sendiri. Urutannya adalah: compose email, compose SMS, deliver email, deliver SMS.
Kedua class memenuhi kontrak Messageable yang sama, tetapi masing-masing menangani penyusunan dan pengiriman pesan sesuai tujuannya sendiri: email menampilkan alamat penerima, sedangkan pesan SMS menampilkan nomor telepon.
Coba sendiri
<?php
require_once 'Email.php';
require_once 'SMS.php';
// Baca input
$emailAddress = trim(fgets(STDIN));
$phoneNumber = trim(fgets(STDIN));
$messageContent = trim(fgets(STDIN));
// TODO: Buat object Email dengan alamat email
// TODO: Buat object SMS dengan nomor telepon
// TODO: Panggil compose() pada kedua object dan cetak hasilnya
// Urutan: compose email, lalu compose SMS
// TODO: Panggil deliver() pada kedua object dan cetak hasilnya
// Urutan: deliver email, lalu deliver SMS
?>Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
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