1. Memahami Ekosistem Composer dan Packagist
Composer adalah manajer dependensi tingkat proyek untuk PHP, sedangkan Packagist adalah repositori pusat tempat ribuan pustaka open-source PHP (seperti monolog/monolog, phpunit/phpunit, psr/log, atau guzzlehttp/guzzle) didaftarkan.
Dua berkas utama yang selalu berdampingan di akar proyek PHP adalah:
composer.json: Daftar keinginan (manifest) yang menyatakan paket apa saja yang dibutuhkan proyek beserta rentang versi yang diizinkan, persyaratan versi PHP/ekstensi (php,ext-pdo,ext-mbstring), serta aturan autoloading PSR-4.composer.lock: Catatan versi eksak (misalnyav3.7.0beserta referensi commit sumbernya dancontent-hashdaricomposer.json) yang benar-benar terpasang saat ini.
2. Membaca Aturan Semantic Versioning (SemVer): ^ (Caret) vs ~ (Tilde)
Paket PHP modern mengikuti format versi MAJOR.MINOR.PATCH (misalnya 3.4.2):
MAJOR(3): Naik jika ada perubahan yang tidak kompatibel ke belakang (breaking changes).MINOR(4): Naik jika ada penambahan fitur baru yang masih kompatibel ke belakang.PATCH(2): Naik jika hanya berisi perbaikan bug atau tambalan keamanan yang kompatibel.
Ketika Anda menulis batasan versi di dalam composer.json, pahami perbedaan operator berikut:
Penulisan di composer.json | Arti Rentang Versi yang Diizinkan | Kapan Digunakan? |
|---|---|---|
^3.4.2 (Caret — Standar Utama) | >= 3.4.2 dan < 4.0.0 (Mengizinkan pembaruan Patch maupun Minor, tetapi menolak kenaikan Major 4.0.0 yang berisiko merusak kode!). | Pilihan terbaik untuk hampir semua paket yang mematuhi SemVer. |
^0.3.1 (Caret pada versi 0.x) | >= 0.3.1 dan < 0.4.0 (Karena pada versi pra-1.0, kenaikan 0.4.0 dianggap bisa membawa breaking changes). | Otomatis diterapkan Composer untuk paket yang masih di tahap 0.x. |
~3.4.2 (Tilde) | >= 3.4.2 dan < 3.5.0 (Hanya mengizinkan pembaruan Patch 3.4.x, menolak kenaikan Minor 3.5.0). | Ketika Anda ingin membatasi pembaruan hanya pada perbaikan bug tingkat patch. |
>=8.4 | Versi 8.4.0 atau yang lebih tinggi tanpa batas atas. | Digunakan untuk menyatakan persyaratan versi mesin "php": ">=8.4". |
3. Perintah Penting Composer untuk Pengembangan, Audit Keamanan, dan Produksi
# 1. Menambahkan paket produksi (masuk ke bagian "require") composer require monolog/monolog # 2. Menambahkan paket khusus pengembangan/pengujian (masuk ke bagian "require-dev") composer require --dev phpunit/phpunit # 3. Memeriksa apakah ada paket di composer.lock yang memiliki celah keamanan (CVE)! # (Wajib dipasang di dalam pipeline CI/CD GitHub Actions!) composer audit # 4. Memvalidasi apakah composer.json dan composer.lock sinkron dan valid composer validate --strict # 5. Perintah instalasi di SERVER PRODUKSI / DOCKER IMAGE: composer install --no-dev --prefer-dist --no-interaction --optimize-autoloader --classmap-authoritative
Mengapa --classmap-authoritative Sangat Mempercepat Produksi?
Secara bawaan, saat autoloader PSR-4 mencari class Kodeloka\Domain\Kursus, PHP harus memanggil fungsi sistem berkas is_file('src/Domain/Kursus.php') ke diska. Ketika Anda menjalankan --optimize-autoloader --classmap-authoritative saat membangun image produksi, Composer memindai seluruh folder src/ dan vendor/ satu kali, lalu menghasilkan peta array asosiatif statis raksasa ('Kodeloka\\Domain\\Kursus' => '/app/src/Domain/Kursus.php'). Saat aplikasi berjalan di produksi, autoloader langsung memuat berkas dari array memori tersebut (dan yang sudah di-cache di OPcache) tanpa melakukan pemeriksaan is_file() ke diska sama sekali!
4. Standar Gaya Penulisan Kode: PSR-12 dan PER Coding Style
Agar kode yang ditulis oleh ratusan pengembang PHP di berbagai perusahaan tampak seragam dan bersih, PHP-FIG menerbitkan standar gaya kode PSR-12 yang kini diperbarui secara berkelanjutan melalui PER Coding Style (untuk mengakomodasi fitur-fitur baru seperti Enum, Property Hooks PHP 8.4, dan Asymmetric Visibility).
Aturan inti PSR-12 / PER Coding Style yang wajib Anda terapkan:
- Indentasi: Wajib menggunakan 4 spasi (tidak boleh menggunakan karakter Tab).
- Tag PHP & Baris Pertama: Gunakan
<?phpdiikuti baris kosong,declare(strict_types=1);, baris kosong,namespace ...;, baris kosong, blokuse ...;, dan jangan pernah menulis tag penutup?>di akhir berkas PHP murni. - Posisi Kurung Kurawal
{:- Untuk deklarasi
class,enum,interface,trait, danfunction/metode satu baris: tanda kurung kurawal buka{diletakkan di baris baru di bawahnya. - Untuk struktur kontrol (
if,elseif,else,foreach,while,try,catch,match): tanda kurung kurawal buka{diletakkan di baris yang sama setelah spasi!
- Untuk deklarasi
- Visibilitas Eksplisit: Selalu tuliskan
public,protected, atauprivatepada setiap properti, metode, dan konstanta kelas (public const BATAS = 10;).
<?php
declare(strict_types=1);
namespace Kodeloka\Standar;
final class ContohGayaPsr12
{
public const int VERSI_API = 2;
public function periksaKelulusan(int $skor): string
{
if ($skor >= 75) {
return 'Lulus';
} else {
return 'Belum Lulus';
}
}
}
Latihan Praktik: Menyusun composer.json Lengkap dengan Skrip Otomatis
Buatlah berkas composer.json yang bersih dan siap produksi:
- Tetapkan persyaratan
"php": ">=8.4","ext-pdo": "*", dan"ext-mbstring": "*". - Konfigurasikan
"autoload"PSR-4 untuk"Kodeloka\\": "src/"dan"autoload-dev"untuk"Kodeloka\\Tests\\": "tests/". - Tambahkan bagian
"scripts"di dalamcomposer.jsonsehingga menjalankancomposer testotomatis mengeksekusiphpunit --testdox, dancomposer cek-keamananmengeksekusicomposer validate --strictsertacomposer audit!