PSR-4 Autoloading PHP: Standar, Konfigurasi, & Contoh

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 PaymentService harus berada dalam file PaymentService.php).
  • Regenerasi Autoloader: Jalankan ulang composer dump-autoload -o untuk mengoptimalkan autoloader dan memperbarui cache kelas.