Implementasi Beberapa Interface
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan PHP di Coddy. Pelajaran 29 dari 91.
Berbeda dengan pewarisan, ketika sebuah class hanya dapat memperluas satu induk, PHP memungkinkan sebuah class mengimplementasikan beberapa interface. Ini memberimu fleksibilitas untuk menggabungkan berbagai kontrak, sehingga class-mu menjadi lebih serbaguna.
Untuk mengimplementasikan beberapa interface, pisahkan dengan koma setelah kata kunci implements:
<?php
interface Printable {
public function print();
}
interface Savable {
public function save();
}
class Report implements Printable, Savable {
private $title;
public function __construct($title) {
$this->title = $title;
}
public function print() {
return "Printing: " . $this->title;
}
public function save() {
return "Saving: " . $this->title;
}
}
$report = new Report("Sales Report");
echo $report->print() . "\n";
echo $report->save();
Output:
Printing: Sales Report
Saving: Sales Reportclass Report memenuhi kedua kontrak dengan mengimplementasikan semua method dari Printable dan Savable. Kamu harus menyediakan implementasi untuk setiap method yang dideklarasikan di setiap interface.
Pendekatan ini sangat andal karena memungkinkan kamu membuat class yang memenuhi beberapa persyaratan tanpa batasan pewarisan tunggal. Sebuah class dapat dicetak, disimpan, diekspor, dan banyak lagi, sekaligus.
Poin penting: Gunakan koma untuk mengimplementasikan beberapa interface. Class-mu harus menyediakan implementasi konkret untuk semua method dari setiap interface yang diimplementasikannya.
Tantangan
MudahMari buat sistem berkas media yang menunjukkan cara satu class dapat mengimplementasikan beberapa interface untuk memperoleh kemampuan yang berbeda.
Kamu akan membuat empat file yang bekerja sama untuk menangani file media yang dapat diputar dan dibagikan:
Playable.php: Definisikan interfacePlayabledengan satu signature method:play(). Kontrak ini memastikan bahwa media apa pun yang dapat diputar bisa mulai diputar.Shareable.php: Definisikan interfaceShareabledengan satu signature method:share($platform). Kontrak ini memastikan konten apa pun yang dapat dibagikan bisa didistribusikan ke berbagai platform.Video.php: Buat classVideoyang mengimplementasikanPlayabledanShareable. Sertakan kedua file interface di bagian atas. Class ini harus memiliki property$titleprivat dan property$durationprivat (dalam menit). Constructor menerima judul dan durasi. Implementasikanplay()agar mengembalikan"Playing video: [title] ([duration] min)". Implementasikanshare($platform)agar mengembalikan"Sharing [title] on [platform]".main.php: Sertakan file Video. Kamu akan menerima tiga input: judul video, durasi (sebagai string yang harus dikonversi menjadi bilangan bulat), dan nama platform. Buat objectVideodengan judul dan durasi tersebut. Cetak hasil pemanggilanplay()pada baris pertama, lalu cetak hasil pemanggilanshare()dengan platform tersebut pada baris kedua.
Class Video-mu memenuhi dua kontrak terpisah secara bersamaan. Video ini dapat diputar seperti media lainnya dan dapat dibagikan ke platform sosial. Inilah kekuatan mengimplementasikan beberapa interface: satu class memperoleh kemampuan dari berbagai sumber tanpa dibatasi pada satu rantai pewarisan.
Coba sendiri
<?php
// Sertakan file Video
require_once 'Video.php';
// Baca input
$title = trim(fgets(STDIN));
$duration = intval(trim(fgets(STDIN)));
$platform = trim(fgets(STDIN));
// TODO: Buat object Video dengan judul dan durasi
// TODO: Cetak hasil pemanggilan play() pada baris pertama
// TODO: Cetak hasil pemanggilan share() dengan platform pada baris kedua
?>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