Pengenalan Namespace
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan PHP di Coddy. Pelajaran 10 dari 91.
Saat proyek PHP-mu berkembang, kamu akan membuat banyak class. Apa yang terjadi jika dua class memiliki nama yang sama?
Misalnya, kamu mungkin memiliki class User untuk blogmu dan class User lainnya untuk tokomu. Namespace mengatasi masalah ini dengan mengatur class ke dalam kelompok yang logis.
Namespace seperti folder untuk class-mu. Kamu mendeklarasikannya di bagian atas file PHP-mu menggunakan kata kunci namespace:
<?php
namespace Blog;
class User {
public $name;
public function __construct($name) {
$this->name = $name;
}
}
Sekarang kamu bisa memiliki class User lain di namespace yang berbeda:
<?php
namespace Shop;
class User {
public $email;
public function __construct($email) {
$this->email = $email;
}
}
Untuk menggunakan class dengan namespace, kamu merujuknya dengan jalur lengkap menggunakan garis miring terbalik:
<?php
$blogUser = new \Blog\User("Alice");
$shopUser = new \Shop\User("alice@example.com");
echo $blogUser->name . "\n";
echo $shopUser->email . "\n";
Output:
Alice
alice@example.com
Backslash \ memisahkan tingkat namespace, mirip seperti garis miring yang memisahkan folder dalam path file. Kamu juga bisa membuat namespace bertingkat seperti App\Models\Blog untuk pengorganisasian yang lebih mendalam.
Poin Penting: Namespace mencegah konflik nama dan menjaga kodemu tetap teratur. Selalu deklarasikan namespace sebelum kode lain di file-mu, kecuali pernyataan declare.
Tantangan
MudahMari susun aplikasi kecil menggunakan namespace untuk mencegah konflik nama antara class dengan nama yang sama.
Bayangkan kamu sedang membangun sistem yang menangani kendaraan dan hewan. Kedua domain memiliki entitas bernama Car: yang satu mewakili mobil sungguhan, sedangkan yang lain adalah kucing peliharaan bernama "Car" (ya, beberapa orang memang menamai kucing mereka seperti itu!).
Kamu akan membuat tiga file:
Vehicle/Car.php: Definisikan classCardi namespaceVehicledengan propertypublic $brand. Constructor harus menerima nama merek dan menetapkannya. Tambahkan methoddescribe()yang mengembalikan"Vehicle: [brand]".Animal/Car.php: Definisikan classCardi namespaceAnimal(ini adalah kucing bernama Car!). Class ini harus memiliki propertypublic $age. Constructor menerima usia dan menetapkannya. Tambahkan methoddescribe()yang mengembalikan"Cat named Car, age: [age]".main.php: Sertakan kedua file class menggunakanrequire_once. Buat satu object dari setiap namespace menggunakan path namespace lengkapnya, lalu cetak hasil pemanggilandescribe()pada setiap object (masing-masing pada barisnya sendiri).
Di main.php, buat:
Vehicle\Cardengan merek"Toyota"Animal\Cardengan usia3
Ingat untuk menggunakan backslash \ guna merujuk class dengan namespace menggunakan path lengkapnya saat membuat object.
Coba sendiri
<?php
// Sertakan file class
require_once 'Vehicle/Car.php';
require_once 'Animal/Car.php';
// TODO: Buat object Vehicle\Car dengan merek "Toyota"
// Ingat untuk menggunakan path namespace lengkap dengan backslash
// TODO: Buat object Animal\Car dengan usia 3
// Ingat untuk menggunakan path namespace lengkap dengan backslash
// TODO: Cetak hasil describe() untuk setiap object (masing-masing pada baris tersendiri)
?>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