PSR-4 Autoloading adalah standar resmi yang ditetapkan oleh PHP Framework Interop Group (PHP-FIG) untuk memetakan namespace PHP ke dalam struktur direktori sistem file fisik. Standar ini menghilangkan kebutuhan untuk menggunakan fungsi require atau include secara manual di setiap file kode, sehingga proses pemuatan kelas (class loading) terjadi secara otomatis saat kelas tersebut dipanggil.
Dalam ekosistem pengembangan modern, PSR-4 merupakan fondasi utama bagi Composerβmanajer ketergantungan (dependency manager) standar PHP. Dengan konfigurasi yang tepat pada file composer.json, setiap perubahan struktur kelas akan langsung dikenali oleh sistem tanpa konfigurasi jalur file yang rumit.
Struktur Direktori dan Aturan Pemetaan PSR-4
Aturan dasar PSR-4 menghubungkan namespace prefix dengan direktori dasar di dalam proyek Anda. Setiap garis miring terbalik (backslash) dalam namespace merepresentasikan tingkat direktori pada sistem file.
| Namespace Prefix | Direktori Target | Contoh Fully Qualified Class Name (FQCN) | Lokasi File Fisik |
|---|---|---|---|
App\ |
src/ |
App\Controllers\HomeController |
src/Controllers/HomeController.php |
Acme\Blog\ |
packages/acme/blog/src/ |
Acme\Blog\Models\Post |
packages/acme/blog/src/Models/Post.php |
Konfigurasi composer.json
Untuk mengaktifkan PSR-4 autoloading, Anda perlu mendefinisikan bagian autoload di dalam file composer.json proyek Anda. Berikut adalah konfigurasi standar untuk memetakan namespace App\ ke folder src/:
{
"name": "namaproyek/aplikasi",
"autoload": {
"psr-4": {
"App\\": "src/"
}
}
}
Setelah menambahkan atau mengubah konfigurasi tersebut, Anda wajib menjalankan perintah berikut di terminal agar Composer memperbarui peta autoloader:
composer dump-autoload
Contoh Implementasi Kode
Berikut adalah contoh nyata penerapan struktur file dan kode PHP menggunakan standar PSR-4.
1. Struktur File Proyek
proyek-anda/
βββ composer.json
βββ src/
β βββ Services/
β βββ PaymentService.php
βββ public/
βββ index.php
2. File Kelas (src/Services/PaymentService.php)
<?php
namespace App\Services;
class PaymentService
{
public function process(float $amount): string
{
return "Pembayaran sebesar {$amount} berhasil diproses.";
}
}
3. File Eksekusi (public/index.php)
<?php
require_once __DIR__ . '/../vendor/autoload.php';
use App\Services\PaymentService;
$payment = new PaymentService();
echo $payment->process(150000);
Troubleshooting Masalah Autoloading
Jika Anda mengalami error seperti Class not found saat memanggil kelas baru, lakukan langkah-langkah pemeriksaan berikut di lapangan:
- Periksa Namespace: Pastikan namespace di dalam file PHP sama persis dengan struktur direktori dan konfigurasi
composer.json(perhatikan huruf besar/kecil karena Linux bersifat case-sensitive). - Nama File dan Kelas: Nama file fisik harus sama persis dengan nama kelas di dalamnya (Contoh: Kelas
PaymentServiceharus berada dalam filePaymentService.php). - Regenerasi Autoloader: Jalankan ulang
composer dump-autoload -ountuk mengoptimalkan autoloader dan memperbarui cache kelas.