Learn
← Previous Next →

Hari 14: Namespace & Autoload

60 min Last updated 09 Apr 2026

Namespace — Menghindari Konflik Nama

// File: app/Models/User.php
namespace App\Models;

class User {
    public function __construct(public string $nama) {}
    public function info(): string { return "User: {$this->nama}"; }
}

// File: app/Services/UserService.php
namespace App\Services;

use App\Models\User;  // import class

class UserService {
    public function buat(string $nama): User {
        return new User($nama);
    }

    public function sapa(User $user): string {
        return "Halo, {$user->nama}!";
    }
}

Alias Namespace

use App\Models\User as UserModel;
use App\Services\UserService as Service;

$service = new Service();
$user = $service->buat("Budi");
echo $service->sapa($user); // Halo, Budi!

Composer & PSR-4 Autoload

Composer adalah dependency manager PHP. Dengan PSR-4, class otomatis di-load sesuai namespace.

// composer.json
{
    "autoload": {
        "psr-4": {
            "App\": "app/"
        }
    }
}
// Setelah composer dump-autoload, semua class di App\ tersedia otomatis!

💡 Notice: Di satu file, namespace hanya berlaku di bawah deklarasinya. Proyek nyata pakai composer untuk autoload.

Assignment

Simulasi namespace: definisikan class App\Http\Response dengan constructor($status, $body) dan method send() yang echo "HTTP $status: $body". Gunakan namespace dan gunakan alias. Buat instance dan panggil send().

Expected output:

HTTP 200: OK - Data berhasil dimuat
PHP index.php
Solution
Output