Tutorial PHP #24: Namespace dan Autoloading
1. Masalah Tanpa Namespace
Bayangkan project besar dengan ratusan class. Ada kemungkinan nama class bertabrakan - misalnya kamu punya class User di modul auth, dan library pihak ketiga juga punya class User. Namespace menyelesaikan masalah ini.
2. Membuat Namespace
<?php
// File: app/Models/User.php
namespace AppModels;
class User {
public function __construct(
public string $nama,
public string $email
) {}
public function getInfo(): string {
return "{$this->nama} <{$this->email}>";
}
}
?>
<?php
// File: app/Models/Admin.php
namespace AppModels;
class Admin extends User {
public function __construct(
string $nama,
string $email,
public string $level
) {
parent::__construct($nama, $email);
}
}
?>
<?php
// File: app/Services/UserService.php
namespace AppServices;
class UserService {
public function createUser(string $nama): string {
return "User $nama berhasil dibuat";
}
}
?>
3. Menggunakan Namespace dengan use
<?php
// File: index.php
namespace App;
use AppModelsUser;
use AppModelsAdmin;
use AppServicesUserService;
// Alias untuk namespace panjang
use AppServicesUserService as UserSvc;
$user = new User("Ariq", "ariq@mail.com");
$admin = new Admin("Budi", "budi@mail.com", "Super Admin");
$service = new UserSvc();
echo $user->getInfo();
echo $service->createUser("Cici");
?>
4. Namespace Bersarang
<?php
// Namespace bisa bertingkat
namespace AppHttpControllers;
class UserController {
public function index(): string {
return "Daftar semua user";
}
public function show(int $id): string {
return "Detail user #$id";
}
}
?>
5. Autoloading dengan Composer
Daripada menulis require manual untuk setiap file class, kita bisa pakai Composer autoloader yang memuat class secara otomatis berdasarkan namespace.
Langkah setup:
- Install Composer dari getcomposer.org
- Buat file
composer.jsondi root project - Jalankan
composer dump-autoload
{
"autoload": {
"psr-4": {
"App\": "app/"
}
}
}
<?php
// index.php - cukup include autoloader sekali saja
require_once "vendor/autoload.php";
use AppModelsUser;
use AppServicesUserService;
// Class otomatis dimuat dari app/Models/User.php
$user = new User("Ariq", "ariq@mail.com");
echo $user->getInfo();
?>
6. PSR-4 Autoloading Standard
PSR-4 adalah standar autoloading PHP yang paling umum digunakan. Aturannya:
- Namespace prefix (
App) dipetakan ke direktori (app/) - Sub-namespace dipetakan ke sub-direktori
- Nama class sama persis dengan nama file
AppModelsUser → app/Models/User.php
AppHttpControllersUserController → app/Http/Controllers/UserController.php
AppServicesUserService → app/Services/UserService.php
7. Ringkasan
- Namespace menghindari konflik nama class di project besar
- Gunakan
useuntuk mengimport namespace atau class tertentu - Composer + PSR-4 autoloading memuat class otomatis tanpa
requiremanual - Standar struktur folder mengikuti namespace sangat memudahkan maintenance
Tutorial berikutnya membahas error handling dan exception di PHP.
.jpg)
