Composer & Autoloading

Dependency Management for Modern PHP

Oleh: Ahmad Muyassar, S.Kom.,M.Cs

Agenda Pembelajaran

01. Masalah "Dependency Hell"
02. Pengenalan Composer
03. Instalasi & Penggunaan Dasar
04. PSR-4 Autoloading
05. Struktur Project Modern
01

The Problem

Mengapa kita butuh Dependency Manager?

Era Sebelum Composer

Dulu, jika kita ingin menggunakan library pihak ketiga (misal: PHPMailer, FPDF), kita harus:

  1. Download file ZIP manual.
  2. Extract ke folder project.
  3. Include file satu per satu dengan require atau include.

Dependency Hell

Masalah muncul ketika:

Sangat sulit dikelola!

Solusi: Composer

Composer adalah alat untuk manajemen dependensi di PHP. Ia memungkinkan Anda mendeklarasikan library yang dibutuhkan project Anda, dan Composer akan mengelola (menginstal/mengupdate) library tersebut untuk Anda.

02

Composer Basics

Cara Kerja & Instalasi

Packagist.org

Packagist adalah repositori utama untuk paket-paket PHP. Composer secara default mencari library di sini.

Ada ribuan library siap pakai: Laravel, Symfony, Guzzle, Monolog, dll.

Instalasi Composer

Composer adalah file executable composer.phar.


# Cek instalasi
composer --version
            

Pastikan PHP sudah terinstall di komputer Anda.

Inisialisasi Project

Gunakan perintah init untuk membuat file konfigurasi composer.json.


mkdir my-project
cd my-project
composer init
            

File composer.json

File ini adalah "jantung" dari project Anda. Berisi metadata project dan daftar dependensi.


{
    "name": "ahmad/my-project",
    "require": {
        "monolog/monolog": "^2.0"
    }
}
            

Menginstall Library

Gunakan perintah require untuk menambah library baru.


composer require guzzlehttp/guzzle
            

Perintah ini akan:

  1. Menambahkan Guzzle ke composer.json.
  2. Mendownload Guzzle ke folder vendor/.
  3. Membuat/Update composer.lock.

Folder vendor/

Semua library yang didownload Composer akan disimpan di folder vendor/.

JANGAN PERNAH mengedit file di dalam folder vendor!

Dan jangan lupa masukkan vendor/ ke dalam .gitignore.

File composer.lock

File ini mencatat versi eksak dari setiap library yang terinstall.

Ini menjamin bahwa setiap orang di tim Anda menggunakan versi library yang SAMA PERSIS.

Commit file ini ke Git!

install vs update

Perintah Fungsi
composer install Menginstall dependensi sesuai file composer.lock (jika ada). Digunakan saat deploy atau clone project baru.
composer update Mencari versi terbaru library sesuai constraint di composer.json, lalu update composer.lock.
03

Autoloading

Selamat Tinggal `require` Manual

Masalah require/include

Tanpa autoloading, kita harus menulis ini di setiap file:


require_once 'User.php';
require_once 'Product.php';
require_once 'Database.php';
// ... capek kan?
            

Apa itu Autoloading?

Mekanisme di mana PHP otomatis memuat class saat class tersebut dibutuhkan (di-instansiasi).

Composer menyediakan autoloader yang sangat canggih.

Menggunakan Autoloader Composer

Cukup include satu file saja di entry point aplikasi Anda (misal index.php).


require __DIR__ . '/vendor/autoload.php';

use Monolog\Logger;

// Class Logger otomatis dimuat!
$log = new Logger('name');
            
04

PSR-4 Standard

Standar Autoloading Modern

Apa itu PSR-4?

PSR-4 adalah standar rekomendasi dari PHP-FIG yang memetakan Namespace ke Struktur Folder.

Tujuannya agar struktur file rapi dan prediktif.

Aturan PSR-4

Namespace prefix dipetakan ke base directory tertentu.

Namespace: App\
Folder: src/

Artinya:

Konfigurasi PSR-4 di composer.json

Tambahkan bagian autoload di composer.json.


{
    "autoload": {
        "psr-4": {
            "App\\": "src/"
        }
    }
}
            

Dump Autoload

Setiap kali mengubah konfigurasi autoload di composer.json, Anda harus menjalankan perintah:


composer dump-autoload
            

Ini akan men-generate ulang file vendor/autoload.php.

Struktur Project Modern

  • 📂 my-project
    • 📂 src (Kode aplikasi kita)
      • 📄 User.php
      • 📂 Controllers
    • 📂 vendor (Library pihak ketiga - Jangan disentuh)
    • 📄 composer.json
    • 📄 composer.lock
    • 📄 index.php (Entry point)
05

Advanced Composer

Fitur Lanjutan

Dev Dependencies

Ada library yang hanya dibutuhkan saat development (testing, debugging), tapi tidak di production.

Gunakan flag --dev.


composer require --dev phpunit/phpunit
            

Scripts

Composer bisa menjalankan script atau command line custom.


"scripts": {
    "test": "phpunit",
    "start": "php -S localhost:8000 -t public"
}
            

Jalankan dengan: composer test

Classmap Autoloading

Untuk library lama yang tidak menggunakan namespace, kita bisa menggunakan classmap.


"autoload": {
    "classmap": ["lib/", "legacy/file.php"]
}
            

Composer akan memindai folder tersebut dan membuat peta semua class yang ada.

Files Autoloading

Untuk memuat file helper yang berisi fungsi (bukan class).


"autoload": {
    "files": ["src/helpers.php"]
}
            

File ini akan selalu di-load di setiap request.

Version Constraints

Cara menentukan versi library yang diinginkan:

Platform Check

Composer otomatis mengecek apakah versi PHP server memenuhi syarat library.

Jika server pakai PHP 7.4 tapi library butuh PHP 8.0, composer install akan gagal (menjaga keamanan).

Optimized Autoloader

Di production, gunakan flag -o atau --optimize-autoloader saat dump-autoload untuk performa maksimal.


composer dump-autoload -o
            
06

Best Practices

Tips Menggunakan Composer

Commit composer.lock

Selalu commit composer.lock ke version control (Git) jika Anda membuat Aplikasi (Project).

Jika Anda membuat Library, biasanya composer.lock di-ignore.

Jangan Edit Vendor

Sekali lagi, jangan pernah mengubah kode di dalam folder vendor/. Perubahan Anda akan hilang saat update.

Jika butuh modifikasi, extend class-nya atau gunakan pattern Decorator.

Update Rutin

Lakukan composer update secara berkala di development untuk mendapatkan bug fix dan fitur baru, lalu test aplikasi Anda.

Semantic Versioning (SemVer)

Pahami SemVer (Major.Minor.Patch).

Kesimpulan

Terima Kasih

Happy Composing!

1 / 40