Namespace, Autoload & Composer

Namespace, use, standar PSR-4 dan PSR-12, autoloading, composer.json, menginstal paket, dan struktur proyek PHP modern.

Part 14 dari 22 ± 40 menit Gratis

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 (setelah declare).
  • use mengimpor nama panjang agar bisa ditulis pendek. Alias: use App\Model\Produk as P;.
  • Awali \ untuk nama global/absolut: \strlen(), \DateTime.
  • Produk::class menghasilkan 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:

NamespaceFolderBerkas
App\Model\Produksrc/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 sama
  • vendor/ — 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).

Praktikkan langsung, gratis

Tulis dan jalankan kode langsung di browser, dapatkan penilaian otomatis. Daftar gratis kapan saja untuk menyimpan progres dan meraih sertifikat.

Coba latihan sekarang, tanpa daftar
Bagikan: WhatsApp Facebook LinkedIn X