Namespace, Autoload & Composer
Namespace, use, standar PSR-4 dan PSR-12, autoloading, composer.json, menginstal paket, dan struktur proyek PHP modern.
Masalah: bentrok nama
Bayangkan dua library sama-sama punya class Logger. Tanpa pemisah, PHP tidak bisa membedakannya. Namespace adalah "folder virtual" untuk nama class, fungsi, dan konstanta.
<?php
declare(strict_types=1);
namespace App\Layanan;
use App\Model\Produk;
use InvalidArgumentException; // class global perlu di-use (atau ditulis \InvalidArgumentException)
use function App\Helper\formatRupiah; // fungsi
class PesananService
{
public function buat(Produk $p): string
{
return formatRupiah($p->harga);
}
}
namespace App\Layanan;harus berada di bagian atas berkas (setelahdeclare).usemengimpor nama panjang agar bisa ditulis pendek. Alias:use App\Model\Produk as P;.- Awali
\untuk nama global/absolut:\strlen(),\DateTime. Produk::classmenghasilkan nama lengkap sebagai string ('App\Model\Produk').
Autoloading — tak perlu require manual
Dulu: require 'Produk.php'; require 'Pesanan.php'; ... puluhan baris. Sekarang class dimuat otomatis saat pertama dipakai. Standar PSR-4 memetakan namespace ke folder:
| Namespace | Folder | Berkas |
|---|---|---|
App\Model\Produk | src/Model/ | src/Model/Produk.php |
Aturan: satu class per berkas, nama berkas = nama class (persis, termasuk huruf besar), struktur folder = struktur namespace.
Composer — pengelola paket PHP
composer init # buat composer.json
composer require monolog/monolog # pasang paket logging
composer require --dev phpunit/phpunit pestphp/pest # paket pengembangan
composer install # pasang sesuai composer.lock
composer update # perbarui paket
composer dump-autoload # bangun ulang peta autoload
Contoh composer.json:
{
"name": "saya/toko",
"require": { "php": "^8.3", "monolog/monolog": "^3.0" },
"require-dev": { "phpunit/phpunit": "^11.0" },
"autoload": { "psr-4": { "App\\": "src/" } }
}
Di titik masuk aplikasi (public/index.php), cukup satu baris:
require __DIR__ . '/../vendor/autoload.php';
Berkas penting Composer
composer.json— daftar kebutuhan (kamu yang menulis)composer.lock— versi persis yang terpasang; commit ke git agar semua anggota tim & server memakai versi samavendor/— paket hasil unduhan; jangan commit (masukkan ke.gitignore)
Semantic versioning
^3.0 berarti "boleh naik minor/patch, tetapi tidak major baru" (≥3.0.0 <4.0.0). ~3.1 ≥3.1.0 <3.2... Selalu baca changelog sebelum menaikkan versi major.
Standar kode: PSR
- PSR-1/PSR-12: gaya penulisan (indentasi 4 spasi, kurung kurawal, penamaan). Alat: PHP CS Fixer atau Laravel Pint.
- PSR-3: antarmuka logger. PSR-4: autoload. PSR-7/15: HTTP message & middleware.
Struktur proyek yang rapi
proyek/
├── public/index.php ← satu-satunya yang diakses web
├── src/ ← kode aplikasi (namespace App\)
├── tests/
├── vendor/ ← Composer
├── composer.json
└── .env ← rahasia, JANGAN di-commit
Alat bantu kualitas: PHPStan / Psalm (analisis statis menemukan bug tanpa menjalankan kode), PHPUnit / Pest (tes otomatis).