Class Buku dan Pengguna
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan PHP di Coddy. Pelajaran 83 dari 91.
Tantangan
MudahMari kita bangun fondasi Library Management System dengan membuat class Book dan User. Object domain inti ini akan bekerja sama untuk mengelola operasi perpustakaan.
Kamu akan mengatur kodemu dalam tiga file:
Book.php: Buat classBookuntuk melacak buku perpustakaan. Buku kamu harus memiliki tiga property readonly yang ditetapkan melalui constructor promotion:isbn,title, danauthor. Sertakan property privat$isAvailableyang nilai awalnyatrue. Tambahkan tiga method:isAvailable(): bool: mengembalikan status ketersediaanmarkAsBorrowed(): void: mengatur ketersediaan menjadi salahmarkAsReturned(): void: mengatur ketersediaan menjadi benar
User.php: Sertakan file Book dan buat classUseryang mewakili anggota perpustakaan. User kamu harus memiliki dua property readonly melalui constructor promotion:id(int) danname(string). Sertakan array privat$borrowedBooks(awalnya kosong) dan konstantaMAX_BOOKSyang nilainya ditetapkan ke3. Tambahkan method berikut:getBorrowedBooks(): array: mengembalikan array buku yang dipinjamcanBorrow(): bool: mengembalikan benar jika user meminjam kurang dari MAX_BOOKS bukuaddBook(Book $book): void: menambahkan buku ke array buku yang dipinjamremoveBook(string $isbn): void: menghapus buku berdasarkan ISBN menggunakanarray_filter
main.php: Sertakan file User dan gunakan class kamu. Kamu akan menerima empat input: ID user, nama user, ISBN buku, dan judul buku (author akan bernilai"Unknown").Buat
UserdanBookdengan nilai yang diberikan. Cetak apakah user dapat meminjam buku pada awalnya, lalu minta user meminjam buku tersebut (tandai sebagai dipinjam dan tambahkan ke daftar user). Terakhir, cetak ketersediaan buku dan jumlah buku yang dipinjam.Format output:
Can borrow: [yes/no] Book available: [yes/no] Books borrowed: [count]
Perhatikan bagaimana enkapsulasi melindungi keadaan internal: ketersediaan buku hanya berubah melalui method khusus, dan buku yang dipinjam user dikelola melalui akses yang terkontrol. Fondasi ini akan mendukung sistem peminjaman yang akan kita bangun berikutnya.
Coba sendiri
<?php
require_once 'User.php';
// Baca input
$userId = intval(trim(fgets(STDIN)));
$userName = trim(fgets(STDIN));
$bookIsbn = trim(fgets(STDIN));
$bookTitle = trim(fgets(STDIN));
$bookAuthor = "Unknown";
// TODO: Buat object User dengan id dan nama yang diberikan
// TODO: Buat object Book dengan isbn, judul, dan penulis yang diberikan
// TODO: Tampilkan apakah pengguna dapat meminjam pada awalnya
// Format: "Can borrow: yes" atau "Can borrow: no"
// TODO: Buat pengguna meminjam buku:
// - Tandai buku sebagai dipinjam
// - Tambahkan buku ke daftar buku yang dipinjam pengguna
// TODO: Tampilkan ketersediaan buku
// Format: "Book available: yes" atau "Book available: no"
// TODO: Tampilkan jumlah buku yang dipinjam
// Format: "Books borrowed: [count]"
?>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 Form14Proyek: Manajemen library
Ringkasan ProyekClass Buku dan Pengguna3Property 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