Fungsi Kustom untuk Autoload Kelas dalam OOP di PHP
Seringkali autoload bawaan mungkin tidak memenuhi kebutuhan Anda karena alasan tertentu. Dalam kasus seperti ini, Anda dapat membuat autoload Anda sendiri.
Untuk melakukannya, Anda perlu meneruskan fungsi callback
yang Anda tulis sebagai parameter pertama ke fungsi spl_autoload_register.
Fungsi ini akan dipanggil
ketika PHP mendeteksi akses ke
kelas yang belum dimuat.
Nama kelas dengan namespace-nya akan
diperoleh oleh parameter fungsi ini:
<?php
spl_autoload_register(function($class) {
// variabel $class akan berisi nama kelas dengan namespace
});
?>
Dan tugas fungsi ini adalah memuat
kelas tersebut melalui require berdasarkan nama kelas.
Artinya, di dalam fungsi ini kita harus menuliskan
aturan kita sendiri untuk memuat kelas, yaitu
konvensi penamaan kita sendiri.
Mari kita tulis contoh autoload kustom. Misalnya, kita menetapkan bahwa path ke file kelas dari root situs akan sama dengan namespace-nya, tetapi dengan mempertahankan *case* karakter.
Artinya, jika kita memiliki kelas Core\Admin\PageController,
maka path-nya harus Core/Admin/PageController.php.
Seperti yang Anda lihat, untuk mengubah nama kelas
dengan namespace-nya, kita hanya perlu mengganti
*backslash* dengan *slash*,
dan menambahkan .php ke nama kelas.
Mari kita lakukan ini:
<?php
spl_autoload_register(function($class) {
$filename = str_replace('\\', '/', $class) . '.php';
require($filename);
});
?>
Akan tetapi, kita akan mendapatkan path relatif ke file (relatif terhadap root situs). Lebih baik membuat path absolut, seperti ini:
<?php
spl_autoload_register(function($class) {
$root = $_SERVER['DOCUMENT_ROOT'];
$filename = $root . '/' . str_replace('\\', '/', $class) . '.php';
require($filename);
});
?>
Ada satu nuansa lagi. Di sistem operasi yang berbeda,
path folder mungkin menggunakan slash miring ke depan
atau slash miring ke belakang. Mari kita buat kode kita
independen dari sistem operasi. Untuk melakukannya, alih-alih
slash miring ke depan untuk memisahkan path, kita akan
menggunakan konstanta DIRECTORY_SEPARATOR,
yang berisi slash yang benar untuk sistem operasi
di mana skrip kita sedang dijalankan. Hasilnya, kita mendapatkan kode berikut:
<?php
spl_autoload_register(function($class) {
$root = $_SERVER['DOCUMENT_ROOT'];
$ds = DIRECTORY_SEPARATOR;
$filename = $root . $ds . str_replace('\\', $ds, $class) . '.php';
require($filename);
});
?>
Ujilah fungsi autoload yang saya buat.
Ciptakan aturan autoload Anda sendiri dan implementasikan.