Class Autoloader dalam OOP PHP - Ep. 7
Suatu hal yang tidak efisien ialah jika kita akan akan menggunakan banyak class, kita membuat setiap class dalam satu file tersendiri dan jika akan menggunakannya kita meng-include-kan satu per satu file class pada permulaan baris kode. Ini bukan masalah jika hanya melakukan include satu, dua atau lima file, tapi jika puluhan? ratusan bahkan lebih?
Mulai PHP 5 masalah itu sudah bisa diatasi dengan mudah. Misal kita membuat sebuah class Name
dan disimpan dalam file Name.php
:
<?php
class Name {
function showName($name)
{
echo 'Nama saya ' . $name . ' ';
}
}
Buat lagi class yaitu class Address
dan disimpan dalam file Address.php
.
<?php
class Address {
function showAddress($address)
{
echo 'Alamat saya ' . $address;
}
}
Selanjutnya kita panggil dua buah class tersebut dalam satu file index.php
<?php
include 'Name.php';
$name = new Name();
$name->showName('Khoerodin');
include 'Address.php';
$address = new Address();
$address->showAddress('Ciamis');
Jika kode diatas dijalankan maka akan menghasilkan output Nama saya Khoerodin Alamat saya Ciamis
. Kode tersebut benar alias tidak ada yang salah, namun seperti yang saya tulis di awal, bagaimana jika classnya puluhan bahkan ratusan? tentu akan merepotkan. Kita ubah index.php
jadi seperti ini:
<?php
spl_autoload_register(function ($class) {
include $class . '.php';
});
$name = new Name();
$name->showName('Khoerodin');
$address = new Address();
$address->showAddress('Ciamis');
Coba jalankan kode tersebut. Ya inilah solusinya, kita tidak usah repot-repot meng-include satu per satu file class yang dibutuhkan karena akan repot jika class yang dibutuhkan tidak sedikit. Dengan ini PHP otomatis akan memanggil/melakukan include
ketika new Class()
dideklarasikan.
spl_autoload_register()
fungsinya untuk meregister function atau static method yang berisi class, selanjutnya apabila ada class yang diinstansiasi menggunakan new Class()
PHP akan melakukan antrian (queue/stack) dan memanggilnya secara berurutan.
Mudah bukan? 🤩 ayo tetap semangaaat 💪💪💪.