PHP adalah bahasa pemrograman yang menguasai sebagian besar website di dunia, dari blog sederhana hingga platform berskala besar. Pada Course ini, kita mempelajari PHP secara menyeluruh: mulai dari pengenalan dan instalasi, sintaks dasar, tipe data, control flow, array, dan fungsi; berlanjut ke object-oriented programming, namespaces, Composer, dan fitur modern PHP 8; lalu naik ke topik web nyata seperti form handling, sessions, database dengan PDO, REST API, keamanan, testing, hingga deployment.

Materi disusun bertahap mengikuti progression pembelajaran. Setiap Section membangun di atas Section sebelumnya, dan Section Proyek PHP di akhir Course menggabungkan seluruh materi ke dalam sebelas proyek bertingkat — dari kalkulator terminal sampai aplikasi SaaS multi-tenant.

Seluruh contoh kode pada Course ini diuji menggunakan PHP 8.4. Apabila Anda menggunakan versi PHP yang berbeda, hasil eksekusi beberapa contoh dapat sedikit berbeda, terutama pada bagian yang memanfaatkan fitur terbaru.

Bab 2 Instalasi dan Lingkungan Pengembangan

# Menginstal PHP

Pelajari cara memilih versi dan jalur instalasi PHP untuk menyiapkan komputer belajar Anda.

Buka →
# Instalasi PHP di Linux

Pelajari cara memasang PHP di Ubuntu, Debian, Fedora, dan Arch Linux beserta ekstensi umum yang dibutuhkan course ini.

Buka →
# Instalasi PHP di Windows

Pelajari cara memasang PHP di Windows melalui berkas ZIP resmi, winget, atau bundel seperti Laragon dan XAMPP.

Buka →
# Instalasi PHP di macOS

Pelajari cara memasang PHP di macOS dengan Homebrew serta alternatif praktis seperti Laravel Herd dan XAMPP.

Buka →
# Memahami PHP CLI

Pelajari cara menjalankan skrip PHP dari terminal dengan php-cli, mulai dari berkas, mode -r, hingga server web bawaan.

Buka →
# Memeriksa Versi PHP

Pelajari cara membaca informasi versi PHP dari terminal dan dari dalam skrip, lalu membandingkannya dengan version_compare().

Buka →
# Memahami PHP Configuration

Pelajari dari mana PHP membaca konfigurasi, cara melihatnya dengan php -i dan php --ini, serta membaca dan mengubah nilai dari dalam skrip.

Buka →
# php.ini

Pelajari struktur berkas php.ini, directive penting untuk pemula, prasetel development dan production, serta mekanisme berkas tambahan di conf.d.

Buka →
# Mengaktifkan PHP Extensions

Pelajari cara melihat, memeriksa, dan mengaktifkan ekstensi PHP dengan php -m, extension_loaded(), dan direktif extension=.

Buka →
# Memilih Code Editor

Pelajari cara memilih code editor untuk PHP, dari VS Code dengan Intelephense hingga PhpStorm, Zed, dan Neovim.

Buka →
# Menggunakan Terminal

Pelajari perintah terminal dasar untuk menjalankan skrip PHP, mengelola berkas proyek, dan bekerja jauh lebih cepat.

Buka →
# Mengatasi Masalah Instalasi

Pelajari cara mendiagnosis masalah instalasi PHP seperti command not found, PATH, beberapa versi PHP, dan ekstensi yang gagal dimuat.

Buka →

Bab 3 Menjalankan Program PHP

# Program PHP Pertama

Pelajari cara membuat, menjalankan, dan memahami program PHP pertama Anda dari awal sampai tampil di terminal.

Buka →
# Struktur File PHP

Pelajari cara kerja berkas PHP dieksekusi dari atas ke bawah dan kebiasaan penulisan berkas yang rapi.

Buka →
# PHP Tags

Pelajari semua bentuk PHP tags untuk menyisipkan kode PHP di dalam HTML dengan rapi.

Buka →
# Statement dan Expression

Pelajari perbedaan statement dan expression beserta aturan titik koma yang menjadi napas setiap program PHP.

Buka →
# Indentasi dan Code Block

Pelajari cara menata statement dengan indentasi dan code block agar kode PHP mudah dibaca manusia.

Buka →
# Komentar

Pelajari cara menulis komentar satu baris, multi-baris, dan doc comment agar kode PHP menjelaskan dirinya sendiri.

Buka →
# Output dengan echo dan print

Pelajari perbedaan echo dan print beserta escape sequence untuk mengendalikan output program PHP Anda.

Buka →
# Menjalankan Script melalui CLI

Pelajari cara menjalankan script PHP lewat CLI: dari berkas, kode sekali pakai, hingga script executable dengan exit code.

Buka →
# Built-in Web Server

Pelajari cara menjalankan web server PHP bawaan untuk menguji halaman web di komputer Anda sendiri.

Buka →
# PHP Interactive Shell

Pelajari cara menguji potongan kode PHP secara interaktif tanpa membuat berkas melalui interactive shell dan php -r.

Buka →
# Memahami PHP Errors

Pelajari cara membaca pesan error PHP untuk menemukan lokasi kesalahan dan membedakan parse error, fatal error, dan warning.

Buka →

Bab 5 Tipe Data dan Type System

# Integers

Pelajari cara PHP menyimpan bilangan bulat, batas 64-bit, penulisan berbagai basis bilangan, dan perilaku pembagian.

Buka →
# Floating-Point Numbers

Pelajari cara kerja float PHP, jebakan presisi biner 0.1+0.2, perbandingan dengan toleransi, pembulatan, serta NAN dan INF.

Buka →
# Strings

Pelajari string sebagai tipe data PHP — array byte yang bisa diindeks, perilaku panjangnya, dan konversinya menjadi angka.

Buka →
# Booleans

Pelajari tipe boolean PHP, daftar lengkap nilai falsy, jebakan truthiness string, dan praktik perbandingan yang eksplisit.

Buka →
# null

Pelajari nilai null PHP, perbedaannya dengan variabel yang belum didefinisikan, operator ?? dan ?->, serta perilakunya dalam operasi.

Buka →
# Arrays

Pelajari array PHP sebagai ordered map — satu tipe untuk daftar dan pemetaan, lengkap dengan aturan konversi key-nya.

Buka →
# Objects

Pelajari object sebagai tipe data PHP — instance class, stdClass, casting array ke object, dan perilaku salinan berbasis referensi.

Buka →
# Type Juggling

Pelajari aturan konversi tipe otomatis PHP pada aritmetika, string numerik, perbandingan, dan null.

Buka →
# Type Casting

Pelajari cara mengonversi nilai antar tipe data secara eksplisit dengan type casting di PHP.

Buka →
# Type Checking

Pelajari cara memeriksa tipe data saat runtime dengan fungsi is_*, gettype(), dan get_debug_type().

Buka →
# Nullable Types

Pelajari cara mendeklarasikan tipe yang juga mengizinkan null dengan sintaks nullable types di PHP.

Buka →
# Union Types

Pelajari cara mendeklarasikan parameter dan nilai kembali yang menerima lebih dari satu tipe dengan union types.

Buka →
# Intersection Types

Pelajari cara mendeklarasikan tipe yang mewajibkan nilai memenuhi beberapa interface sekaligus dengan intersection types.

Buka →
# Literal Types

Pelajari cara menyatakan tipe yang hanya menerima satu nilai spesifik — dari true dan false yang berdiri sendiri hingga literal string lewat PHPDoc.

Buka →
# never dan void

Pelajari cara mendeklarasikan fungsi tanpa nilai balik dengan void dan fungsi yang sama sekali tidak pernah kembali dengan never.

Buka →
# Memahami Type Errors

Pelajari cara membaca pesan TypeError pada mode weak dan strict, menangkapnya dengan try-catch, serta menelusuri stack trace.

Buka →

Bab 6 Operator dan Expression

# Operator Aritmatika

Pelajari cara melakukan perhitungan dengan operator aritmatika PHP, dari penjumlahan dasar hingga modulo, pangkat, dan penanganan pembagian nol.

Buka →
# Operator Assignment

Pelajari cara memberi nilai ke variabel secara ringkas dengan operator assignment, dari bentuk dasar, operator gabungan, hingga assignment referensi.

Buka →
# Operator Perbandingan

Pelajari cara membandingkan nilai dengan operator perbandingan PHP dan pahami aturan perbandingan longgar antara string dan angka di PHP 8.

Buka →
# Operator Identitas

Pelajari cara membandingkan nilai dan tipe data secara ketat dengan operator identitas === dan !== pada angka, string, array, hingga object.

Buka →
# Operator Logika

Pelajari cara menggabungkan beberapa kondisi dengan operator logika PHP dan hindari jebakan precedence antara && dan and.

Buka →
# Operator String

Pelajari cara menggabungkan teks dengan operator string PHP, memahami koersi angka, dan urutan evaluasi terhadap operator aritmatika.

Buka →
# Operator Array

Pelajari cara menggabungkan array dengan operator union +, membandingkan array dengan == dan ===, serta menambah elemen dengan kurung siku.

Buka →
# Operator Bitwise

Pelajari cara mengolah angka di tingkat bit dengan operator bitwise PHP, dari AND, OR, XOR, shift, hingga teknik bitmask untuk kumpulan opsi.

Buka →
# Null Coalescing Operator

Pelajari cara memberi nilai cadangan secara ringkas dengan operator ?? dan ??= untuk menangani data yang mungkin tidak ada.

Buka →
# Nullsafe Operator

Pelajari cara mengakses method dan properti objek secara aman dengan nullsafe operator ?-> untuk menghindari fatal error.

Buka →
# Ternary Operator

Pelajari cara memilih nilai dalam satu ekspresi dengan ternary operator ? : beserta bentuk pendeknya ?:.

Buka →
# Spaceship Operator

Pelajari cara membandingkan dua nilai sekaligus dengan spaceship operator <=> untuk logika perbandingan dan pengurutan yang ringkas.

Buka →
# Increment dan Decrement

Pelajari cara kerja operator ++ dan -- beserta perbedaan pre-increment dan post-increment pada angka, null, dan string.

Buka →
# Operator Precedence

Pelajari cara PHP menentukan urutan evaluasi operator dan gunakan tanda kurung untuk menulis ekspresi yang jelas.

Buka →
# Truthiness dan Short-Circuit

Pelajari cara PHP mengubah nilai menjadi boolean serta memanfaatkan short-circuit untuk logika yang aman dan efisien.

Buka →

Bab 7 String dan Text Processing

# String Syntax

Pelajari cara menulis string dalam PHP dengan empat keluarga sintaks serta memahami string PHP sebagai deretan byte.

Buka →
# Single-Quoted dan Double-Quoted Strings

Pelajari cara kerja string single-quoted dan double-quoted beserta escape, tanda kutip, dan kapan memilih keduanya.

Buka →
# Heredoc dan Nowdoc

Pelajari cara menulis teks multi-baris dengan heredoc dan nowdoc — dari indentasi fleksibel hingga pola penyusunan SQL dan HTML.

Buka →
# String Interpolation

Pelajari cara menyisipkan nilai variabel, elemen array, dan property object ke dalam string dengan sintaks sederhana maupun kompleks.

Buka →
# String Concatenation

Pelajari cara menggabungkan string dengan operator titik dan titik-sama-dengan, menyusun teks panjang, serta menggabungkan array dengan implode().

Buka →
# String Length dan Encoding

Pelajari cara mengukur panjang string dengan strlen dan mb_strlen serta memotong teks UTF-8 tanpa merusak karakternya.

Buka →
# Searching dalam String

Pelajari cara mencari teks di dalam string dengan str_contains, strpos, mb_strpos, dan substr_count.

Buka →
# Replacing Text

Pelajari cara mengganti teks dalam string dengan str_replace, strtr, substr_replace, dan str_repeat.

Buka →
# Trimming dan Padding

Pelajari cara membersihkan tepi string dengan trim, menambah karakter dengan str_pad, dan membungkus teks panjang dengan wordwrap.

Buka →
# Splitting dan Joining

Pelajari cara memecah string menjadi array dengan explode serta menggabungkan array kembali menjadi string dengan implode.

Buka →
# String Formatting

Pelajari cara menyusun teks terformat dengan sprintf, printf, vsprintf, dan number_format untuk keluaran yang rapi.

Buka →
# Unicode dan UTF-8

Pelajari cara mengolah teks Unicode dan UTF-8 di PHP dengan keluarga fungsi mb_* agar karakter apa pun tetap utuh.

Buka →
# Regular Expressions

Pelajari cara menulis pola regular expression dengan preg_match, preg_match_all, preg_replace, dan preg_split untuk mencari serta mengubah teks secara fleksibel.

Buka →
# Text Normalization

Pelajari cara menyeragamkan teks menjadi bentuk baku dengan mb_strtolower, mb_convert_case, perapian whitespace, dan penghapusan BOM sebelum data disimpan atau dibandingkan.

Buka →

Bab 8 Control Flow

# if-else

Pelajari cara mengambil keputusan di program PHP dengan if-else, aturan truthiness, dan guard clause agar alur kode tetap jelas.

Buka →
# elseif

Pelajari cara merangkai banyak kondisi berurutan dengan elseif untuk memilih satu cabang dari beberapa kemungkinan.

Buka →
# Nested Conditions

Pelajari cara menyusun if di dalam if, mengenali sarang yang terlalu dalam, lalu merapikannya dengan guard clause dan penggabungan kondisi.

Buka →
# Match Expression

Pelajari cara mengganti rantai if-elseif dan switch yang rapuh dengan match expression yang membandingkan ketat dan langsung menghasilkan nilai.

Buka →
# while Loops

Pelajari cara mengulang blok kode dengan while, dari counter sederhana dan akumulator hingga idiom membaca berkas baris demi baris.

Buka →
# do-while Loops

Pelajari cara memakai do-while untuk perulangan yang selalu berjalan minimal sekali, termasuk pola validasi input yang menjawab sampai benar.

Buka →
# for Loops

Pelajari cara memakai for untuk perulangan berbasis hitungan, dari anatomi header init-kondisi-increment hingga loop bersarang.

Buka →
# foreach Loops

Pelajari cara menelusuri array dan object dengan foreach untuk iterasi yang ringkas dan bebas bug indeks.

Buka →
# break dan continue

Pelajari cara menghentikan dan melewati iterasi dengan break dan continue untuk kendali loop yang presisi.

Buka →
# Alternative Control Structure Syntax

Pelajari cara memakai sintaks alternatif seperti endif dan endforeach untuk template PHP yang jauh lebih mudah dibaca.

Buka →
# goto dan Labels

Pelajari cara kerja goto dan label di PHP beserta batasan ketatnya dan alasan ia hampir selalu dihindari.

Buka →
# Merancang Control Flow

Pelajari cara merancang control flow yang mudah dibaca dengan guard clause, early return, dan nesting minimal.

Buka →

Bab 9 Arrays dan Collections

# Indexed Arrays

Pelajari cara membuat dan mengakses indexed array di PHP untuk mengelola kumpulan data secara berurutan.

Buka →
# Associative Arrays

Pelajari cara menyimpan data berlabel dengan associative array dan membedakan isset dari array_key_exists.

Buka →
# Multidimensional Arrays

Pelajari cara menyusun data berlapis dengan multidimensional array mulai dari matriks hingga daftar produk bertabel.

Buka →
# Membuat dan Mengakses Array

Pelajari berbagai cara membuat array dengan range, array_fill, dan explode serta mengakses elemennya secara aman.

Buka →
# Menambah, Mengubah, dan Menghapus Elemen

Pelajari cara menambah, mengubah, dan menghapus elemen array dengan operator penugasan, unset, dan fungsi bawaan PHP.

Buka →
# Array Unpacking

Pelajari cara menggabungkan array dengan spread operator ... secara ringkas, aman, dan efisien.

Buka →
# Array Destructuring

Pelajari cara mengekstrak elemen array langsung ke variabel dengan destructuring yang ringkas.

Buka →
# Array Keys dan Values

Pelajari cara mengambil kunci, nilai, dan kolom data dari array dengan array_keys, array_values, dan array_column.

Buka →
# Array Sorting

Pelajari cara mengurutkan array dengan sort, asort, ksort, usort, hingga mengamankan urutan data yang stabil.

Buka →
# Searching dan Filtering Arrays

Pelajari cara mencari nilai di dalam array dan menyaring elemennya dengan in_array, array_search, array_filter, dan array_slice.

Buka →
# array_map, array_filter, dan array_reduce

Pelajari cara membentuk dan merangkum data array dengan array_map, array_filter, dan array_reduce untuk pipeline pengolahan data yang ringkas.

Buka →
# Array Merge dan Difference

Pelajari cara menggabungkan dan membandingkan array dengan array_merge, operator union, difference, dan intersect agar data tersusun tanpa kehilangan kunci.

Buka →
# Array Copy dan References

Pelajari cara PHP menyalin array lewat copy-on-write dan kapan reference (&) mengikat dua variabel ke array yang sama.

Buka →
# Array Iteration

Pelajari cara mengiterasi array dengan foreach, for, array_walk, iterator, dan generator agar setiap loop memakai alat yang tepat.

Buka →
# Array Functions

Pelajari kumpulan fungsi array praktis sehari-hari — compact, array_pad, range, array_unique, array_rand, sampai array_is_list — untuk bekerja lebih cepat.

Buka →
# Memilih Struktur Data

Pelajari cara memilih antara array, stdClass, dan class dengan typed properties agar data Anda fleksibel, aman, dan mudah dibaca.

Buka →

Bab 10 Fungsi

# Mendefinisikan Fungsi

Pelajari cara mendefinisikan fungsi dengan kata kunci function, mengembalikan nilai, dan menata urutan definisi fungsi di berkas PHP.

Buka →
# Memanggil Fungsi

Pelajari cara memanggil fungsi PHP: urutan evaluasi argumen, jumlah argumen yang salah, dan gaya pemanggilan dari string sampai first-class callable.

Buka →
# Parameters dan Arguments

Pelajari perbedaan parameter dan argument, lalu cara PHP mengirim nilai: by value sebagai salinan atau by reference ke variabel asli.

Buka →
# Default Parameters

Pelajari cara memberi nilai default pada parameter fungsi PHP, dari ekspresi konstan sampai pola nullable dan aturan urutan parameter wajib.

Buka →
# Named Arguments

Pelajari cara memanggil fungsi PHP dengan named arguments untuk mengisi parameter berdasarkan nama, melompati parameter opsional yang tidak relevan.

Buka →
# Variadic Functions

Pelajari cara menerima jumlah argumen yang tidak tetap dengan variadic functions untuk membuat fungsi yang lebih fleksibel.

Buka →
# Return Values

Pelajari cara mengembalikan nilai dari fungsi agar hasil perhitungan bisa dimanfaatkan di seluruh program.

Buka →
# Return Types

Pelajari cara menyatakan return type pada fungsi agar nilai kembalian terjaga dan kontrak fungsi semakin jelas.

Buka →
# Parameter Types

Pelajari cara memberi tipe pada parameter fungsi untuk mencegah data yang tidak sesuai masuk ke dalam fungsi.

Buka →
# Strict Types dalam Fungsi

Pelajari cara mengaktifkan strict_types untuk mematikan koersi tipe otomatis pada pemanggilan fungsi.

Buka →
# Variable Scope dalam Fungsi

Pelajari cara variable scope bekerja di dalam fungsi agar variabel global dan lokal tidak saling tertukar.

Buka →
# global dan static Variables

Pelajari cara memakai variabel global dan static agar fungsi mengingat state, beserta jebakan dan alternatif yang lebih bersih.

Buka →
# Anonymous Functions

Pelajari cara membuat anonymous function sebagai nilai, memakainya sebagai callback, dan mengenalnya sebagai object Closure.

Buka →
# Closures

Pelajari cara closure menangkap variabel dari scope luar lewat use() secara by value maupun by reference.

Buka →
# Arrow Functions

Pelajari cara menulis fungsi pendek satu ekspresi dengan arrow function fn() beserta aturan capture otomatisnya.

Buka →
# First-Class Callables

Pelajari cara mengubah fungsi dan method menjadi nilai dengan sintaks strlen(...) yang diperkenalkan PHP 8.1.

Buka →
# Recursion

Pelajari cara fungsi memanggil dirinya sendiri untuk menyelesaikan masalah berulang dan struktur bersarang.

Buka →
# Merancang Fungsi yang Baik

Pelajari prinsip merancang fungsi yang mudah dibaca, diuji, dan dirawat sepanjang umur aplikasi.

Buka →

Bab 11 Error Handling

# Memahami PHP Errors

Pelajari cara membaca anatomi pesan error PHP dan membedakan kegagalan ringan dari yang menghentikan program.

Buka →
# Error Levels

Pelajari cara mengatur level error PHP dengan error_reporting() untuk mengendalikan pelaporan kegagalan program.

Buka →
# Warnings, Notices, dan Fatal Errors

Pelajari cara mengenali dan memperbaiki pemicu paling umum Warning, Deprecated, dan Fatal Error di PHP 8.

Buka →
# Exceptions

Pelajari cara melempar dan membaca exception PHP sebagai object kegagalan dengan pesan, kode, dan jejak panggilan.

Buka →
# try-catch-finally

Pelajari cara menangkap exception dengan try-catch, menggabungkan tipe dalam satu blok, dan menjamin cleanup dengan finally.

Buka →
# throw dan Rethrow

Pelajari cara melempar exception dari titik mana pun dan melempar ulang dengan konteks untuk menelusuri penyebab kegagalan.

Buka →
# Custom Exceptions

Pelajari cara membuat class exception sendiri agar setiap kegagalan domain memiliki tipe yang spesifik dan mudah ditangani.

Buka →
# Exception Hierarchy

Pelajari pohon keluarga Throwable beserta cabang Error dan Exception untuk menangkap kegagalan pada tingkat presisi yang tepat.

Buka →
# Error vs Exception

Pelajari perbedaan error mesin dan exception untuk memilih mekanisme penanganan kegagalan yang tepat.

Buka →
# Error Reporting

Pelajari cara mengatur level pelaporan error serta tampilannya dengan error_reporting, display_errors, dan log_errors agar masalah kode cepat terlihat.

Buka →
# Error Handlers

Pelajari cara memasang error handler kustom dengan set_error_handler untuk mencatat warning dan mengubahnya menjadi exception yang terkontrol.

Buka →
# Exception Handlers

Pelajari cara memasang exception handler dengan set_exception_handler sebagai jaring pengaman terakhir sebelum program berhenti.

Buka →
# Logging Errors

Pelajari cara mencatat error ke berkas log dengan error_log dan format pesan terstruktur agar kegagalan aplikasi mudah ditelusuri.

Buka →
# Production Error Handling

Pelajari cara menyusun strategi error handling untuk produksi agar pengunjung tetap nyaman dan developer tetap mendapat informasi lengkap.

Buka →

Bab 12 File System dan Streams

# Membaca File

Pelajari cara membaca isi file di PHP dengan file_get_contents, fopen, fgets, fread, hingga menangani file yang tidak dapat dibaca.

Buka →
# Menulis File

Pelajari cara menulis file di PHP dengan file_put_contents, fwrite, mode w dan x, implode untuk daftar baris, hingga pengaruh umask.

Buka →
# Append dan File Locking

Pelajari cara menambahkan data ke file dengan mode a dan FILE_APPEND, lalu melindungi penulisan bersamaan dengan flock dan LOCK_EX.

Buka →
# File Permissions

Pelajari cara membaca dan mengubah file permission di PHP dengan chmod, fileperms, is_readable, is_writable, serta efek umask.

Buka →
# Directory Operations

Pelajari cara mengelola direktori di PHP dengan mkdir, rmdir, scandir, DirectoryIterator, glob, dan RecursiveDirectoryIterator.

Buka →
# File Information

Pelajari cara memeriksa keberadaan, ukuran, waktu modifikasi, dan tipe berkas dengan fungsi informasi berkas PHP.

Buka →
# Filesystem Paths

Pelajari cara membangun dan menormalkan path berkas lintas sistem operasi dengan __DIR__, dirname, dan realpath.

Buka →
# Temporary Files

Pelajari cara membuat dan membersihkan berkas temporer dengan tmpfile, tempnam, dan register_shutdown_function.

Buka →
# Uploads dan File Storage

Pelajari cara menangani upload berkas dengan aman mulai dari struktur $_FILES hingga strategi penyimpanan.

Buka →
# Streams

Pelajari cara kerja streams sebagai abstraksi I/O terpadu PHP beserta wrapper php:// yang menyertainya.

Buka →
# Stream Contexts

Pelajari cara mengonfigurasi operasi stream PHP dengan stream context untuk mengatur timeout, header, dan verifikasi SSL.

Buka →
# Stream Wrappers

Pelajari cara kerja stream wrapper PHP dari skema data:// dan php:// sampai wrapper kustom buatan sendiri.

Buka →
# File Locking

Pelajari cara mengunci berkas dengan flock agar banyak proses bisa menulis tanpa saling merusak data.

Buka →
# Filesystem Security

Pelajari cara mempertahankan keamanan filesystem PHP dari path traversal hingga penyimpanan upload yang aman.

Buka →

Bab 14 Object-Oriented Programming

# Memahami Class dan Object

Pelajari cara mendefinisikan class dan membuat object dengan new untuk mengorganisasi program yang kompleks.

Buka →
# Properties dan Methods

Pelajari cara mendeklarasikan property dan method agar class menyimpan data serta perilaku dalam satu tempat.

Buka →
# Constructors

Pelajari cara memakai method __construct agar object siap dipakai sejak pertama kali dibuat.

Buka →
# Object Initialization

Pelajari cara mengelola urutan inisialisasi object agar selalu berada dalam kondisi valid sejak lahir.

Buka →
# Visibility: public, protected, private

Pelajari cara mengatur visibility public, protected, dan private untuk melindungi data di dalam class Anda.

Buka →
# Inheritance

Pelajari cara mewarisi class dengan extends untuk memakai ulang kode dan menyusun hierarki class yang rapi.

Buka →
# Method Overriding

Pelajari cara menimpa method parent dengan signature yang kompatibel untuk mengubah perilaku tanpa menulis ulang semuanya.

Buka →
# parent dan static Keywords

Pelajari cara kerja kata kunci parent, self, dan static untuk mengakses member class dan constant dengan tepat.

Buka →
# Static Properties dan Methods

Pelajari cara membuat property dan method static milik class itu sendiri untuk memakainya pada konteks yang tepat.

Buka →
# Abstract Classes

Pelajari cara mendefinisikan class abstract sebagai kontrak parsial untuk memaksa child mengimplementasikan perilaku tertentu.

Buka →
# Interfaces

Pelajari cara mendefinisikan kontrak interface untuk membangun kode yang fleksibel dan mudah diuji.

Buka →
# Traits

Pelajari cara memakai trait untuk berbagi implementasi antar class tanpa inheritance.

Buka →
# Anonymous Classes

Pelajari cara membuat anonymous class untuk implementasi sekali pakai dan test double.

Buka →
# final Classes dan Methods

Pelajari cara memakai final untuk melindungi class dan method dari modifikasi tak terduga.

Buka →
# Object Composition

Pelajari cara merakit object dari object lain agar desain lebih fleksibel daripada inheritance.

Buka →
# Object Comparison

Pelajari cara PHP membandingkan object dengan == dan === serta menyusun perbandingan kustom dengan spaceship operator.

Buka →
# Cloning Objects

Pelajari cara menyalin object dengan clone, mengatasi shallow copy melalui __clone, dan alternatif object immutable.

Buka →
# Magic Methods

Pelajari cara magic method seperti __get, __call, dan __toString membuat object PHP berperilaku lebih lentur dan ekspresif.

Buka →
# Late Static Binding

Pelajari cara static:: menunda resolusi pemanggilan class hingga runtime sehingga kode static tetap lentur di bawah inheritance.

Buka →
# Kapan Menggunakan OOP

Pelajari cara menilai kapan OOP benar-benar memberi keuntungan dan kapan kode prosedural sederhana justru lebih tepat.

Buka →

Bab 15 Advanced Object Model

# Typed Properties

Pelajari cara mendeklarasikan property bertipe agar kesalahan penugasan nilai tertangkap sejak dini.

Buka →
# Readonly Properties

Pelajari cara mengunci nilai property agar hanya diinisialisasi sekali dan object Anda tetap dapat dipercaya.

Buka →
# Readonly Classes

Pelajari cara mengunci seluruh property sebuah class sekaligus dengan readonly class agar objek benar-benar immutable.

Buka →
# Constructor Property Promotion

Pelajari cara meringkas deklarasi property dan assignment constructor menjadi satu baris dengan constructor property promotion.

Buka →
# Property Hooks

Pelajari cara menempelkan logika validasi dan komputasi langsung pada property dengan property hooks PHP 8.4.

Buka →
# Asymmetric Visibility

Pelajari cara memisahkan visibility baca dan tulis property agar nilai hanya bisa diubah dari dalam class.

Buka →
# Enums

Pelajari cara mendefinisikan kumpulan nilai tetap dengan enum agar status dan kategori tidak lagi berupa string liar.

Buka →
# Backed Enums

Pelajari cara menautkan nilai int atau string pada case enum agar data dari database dan API bisa dikonversi menjadi tipe yang aman.

Buka →
# Attributes

Pelajari cara menempelkan metadata terstruktur pada class, method, dan property dengan attribute agar kode lain bisa membacanya secara programatik.

Buka →
# Reflection

Pelajari cara memeriksa dan menjalankan struktur class, method, dan property saat runtime dengan reflection.

Buka →
# Generators

Pelajari cara membangun generator dengan yield untuk memproses data berukuran besar secara hemat memori.

Buka →
# Iterators

Pelajari cara mengimplementasikan Iterator dan IteratorAggregate agar objek buatan Anda bisa dijelajahi foreach.

Buka →
# Iterable Types

Pelajari cara memakai tipe iterable agar fungsi Anda menerima array maupun iterator secara seragam.

Buka →
# Weak References

Pelajari cara memakai WeakReference dan WeakMap agar referensi Anda tidak menghalangi garbage collector.

Buka →
# Object Model Best Practices

Pelajari cara merangkai fitur object model PHP menjadi desain class yang sehat dan mudah dirawat.

Buka →

Bab 16 Namespaces dan Autoloading

# Memahami Namespaces

Pelajari cara mengelompokkan class, function, dan konstanta dengan namespaces untuk mencegah bentrok nama di proyek besar.

Buka →
# Namespace Declarations

Pelajari cara mendeklarasikan namespace dengan benar, dari penempatan di awal berkas hingga sub-namespace bertingkat.

Buka →
# Namespace Imports

Pelajari cara meng-import class, function, dan constant dari namespace lain dengan statement use agar kode lebih ringkas.

Buka →
# Fully Qualified Names

Pelajari cara memakai nama absolut ber-backslash awal, perbedaannya dengan nama relatif, dan kapan bentuk tersebut wajib dipakai.

Buka →
# Namespace Aliases

Pelajari cara memberi nama lain dengan kata kunci as untuk mempersingkat nama panjang dan menyelesaikan konflik antar namespace.

Buka →
# Namespace Resolution

Pelajari aturan resolusi nama unqualified, qualified, dan fully qualified beserta fallback function dan constant ke scope global.

Buka →
# Autoloading

Pelajari cara kerja autoloading class PHP, dari masalah require manual hingga pendaftaran autoloader modern dengan spl_autoload_register.

Buka →
# SPL Autoload

Pelajari cara memakai SPL autoload untuk mengelola antrean autoloader yang fleksibel, terurut, dan dapat diinspeksi.

Buka →
# PSR-4 Autoloading

Pelajari aturan pemetaan PSR-4 dari namespace ke jalur berkas dan bangun autoloader PSR-4 minimal Anda sendiri.

Buka →
# Composer Autoloading

Pelajari cara mendeklarasikan autoloading di composer.json dan memakai vendor/autoload.php untuk memuat seluruh class proyek Anda.

Buka →
# Merancang Namespace Project

Pelajari cara merancang struktur namespace proyek yang sehat sejak awal agar tetap rapi dan tidak merusak konsumen saat berevolusi.

Buka →

Bab 17 Modern PHP

# Named Arguments

Pelajari bagaimana named arguments mengubah gaya pemanggilan fungsi PHP modern, dari fungsi bawaan berparameter panjang hingga constructor promotion, variadic, dan risiko kompatibilitasnya.

Buka →
# Match Expressions

Pelajari cara match expression PHP 8.0 menuntaskan bug fallthrough switch dan mengubah percabangan nilai menjadi ekspresi yang aman dan ringkas.

Buka →
# Nullsafe Operator

Pelajari cara nullsafe operator PHP 8.0 menggantikan rantai pemeriksaan null bertingkat dengan satu baris ?-> yang ringkas dan aman.

Buka →
# Union Types

Pelajari cara union types PHP 8.0 mengubah anotasi docblock yang tidak dijalankan menjadi deklarasi tipe int|string yang benar-benar diperiksa saat runtime.

Buka →
# Intersection Types

Pelajari cara intersection types PHP 8.1 menggantikan interface artifisial dan pemeriksaan instanceof manual dengan deklarasi A&B yang menuntut dua kontrak sekaligus.

Buka →
# never Return Type

Pelajari cara return type never pada PHP 8.1 mendokumentasikan function yang tidak pernah kembali dan menjadi fondasi static analysis yang lebih cerdas.

Buka →
# Enums

Pelajari cara enum PHP 8.1 menggantikan pola lama konstanta class dan peniruan constructor private menjadi daftar nilai bernama yang aman tipe.

Buka →
# Readonly Properties dan Classes

Pelajari cara readonly properties dan readonly classes menghentikan bug object yang berubah diam-diam dan menyederhanakan pola with() untuk data yang tidak boleh dimodifikasi.

Buka →
# Fibers

Pelajari cara kerja fiber PHP 8.1 sebagai function yang bisa dihentikan dan dilanjutkan di tengah eksekusi, lengkap dengan perbandingannya terhadap generator dan alasan mengapa kita jarang memakainya secara langsung.

Buka →
# Property Hooks

Pelajari cara property hooks PHP 8.4 menggantikan boilerplate getter dan setter dengan logika yang menempel langsung pada property.

Buka →
# Asymmetric Visibility

Pelajari cara asymmetric visibility PHP 8.4 memisahkan hak baca dan hak tulis property sehingga pola wither menjadi ringkas tanpa membuka pintu mutasi dari luar.

Buka →
# Modern PHP Version Features

Pelajari cara membaca peta fitur PHP 8.0 hingga 8.4 untuk mengenali peluang modernisasi kode lama.

Buka →
# Menjaga Kompatibilitas Versi

Pelajari cara menjaga kode tetap aman di beberapa versi PHP dengan pemeriksaan versi, polyfill, dan deteksi fitur.

Buka →

Bab 18 Type System dan Static Analysis

# Memahami Type Declarations

Pelajari cara membaca dan menulis type declaration di seluruh lokasinya untuk menjadikan kontrak kode eksplisit.

Buka →
# Parameter Types

Pelajari cara parameter types menjadi kontrak yang mengatur variance dan kompatibilitas signature saat inheritance.

Buka →
# Return Types

Pelajari cara return types membentuk kontrak covariance yang aman di sepanjang hierarki class.

Buka →
# Property Types

Pelajari cara mendeklarasikan property bertipe, mengelola keadaan uninitialized, dan mengunci tipe konstanta class.

Buka →
# Union, Intersection, dan Nullable Types

Pelajari cara menyusun tipe gabungan — union, nullable, false dan null mandiri, DNF, hingga mixed — sebagai referensi sintaks lengkap.

Buka →
# Variance

Pelajari cara variance mengatur arah perubahan tipe parameter, return, dan property ketika method diwarisi atau diimplementasikan.

Buka →
# Covariance dan Contravariance

Pelajari cara covariance dan contravariance bekerja dalam studi kasus inheritance konkret beserta jebakan parameter by-reference.

Buka →
# Generics dengan PHPDoc

Pelajari cara membangun tipe generik seperti `Repository<T>` lewat anotasi PHPDoc yang diperiksa PHPStan dan Psalm.

Buka →
# PHPDoc Types

Pelajari cara menulis tipe kaya seperti array<int, string> dan array shape lewat anotasi PHPDoc.

Buka →
# Static Analysis

Pelajari cara static analysis menemukan bug sebelum kode dijalankan dan batas kemampuannya.

Buka →
# Menggunakan PHPStan

Pelajari cara memasang dan menjalankan PHPStan untuk menemukan bug tipe di proyek PHP Anda.

Buka →
# Menggunakan Psalm

Pelajari cara memasang dan menjalankan Psalm serta membandingkannya dengan PHPStan.

Buka →
# Baseline dan Analysis Levels

Pelajari cara menaikkan level analisis PHPStan bertahap dan mengelola utang temuan lama lewat baseline.

Buka →
# Membangun Type-Safe Code

Pelajari strategi menyusun kode PHP yang type-safe dari strict_types hingga value object dan validasi batas.

Buka →

Bab 20 Composer dan Dependency Management

# Apa itu Composer?

Pelajari peran Composer dalam mengelola dependensi PHP untuk membangun proyek di atas pustaka yang andal.

Buka →
# Menginstal Composer

Pelajari cara menginstal Composer melalui installer resmi untuk mulai mengelola dependensi proyek PHP Anda.

Buka →
# composer.json

Pelajari cara menyusun composer.json untuk mendeklarasikan dependensi, autoload, dan scripts proyek Anda.

Buka →
# composer.lock

Pelajari cara composer.lock mengunci versi dependensi untuk memastikan build yang konsisten di semua mesin.

Buka →
# Menginstal Dependencies

Pelajari cara menginstal, menggunakan, dan menghapus dependencies dengan perintah inti Composer.

Buka →
# Version Constraints

Pelajari cara menulis version constraints agar Composer menginstal versi dependensi yang tepat.

Buka →
# Dependency Resolution

Pelajari cara Composer menyelesaikan kendala versi dari seluruh dependensi sekaligus, mengapa konflik terjadi, dan cara memperbaikinya.

Buka →
# Autoloading dengan Composer

Pelajari cara Composer menggabungkan aturan autoload dari seluruh dependensi menjadi satu vendor/autoload.php yang siap dioptimalkan.

Buka →
# Composer Scripts

Pelajari cara mendefinisikan shortcut perintah dan event hook di composer.json untuk mengotomatiskan tugas rutin proyek.

Buka →
# Platform Requirements

Pelajari cara mendeklarasikan syarat versi PHP dan ekstensi di composer.json agar proyek gagal cepat di lingkungan yang salah.

Buka →
# Dependency Auditing

Pelajari cara memeriksa celah keamanan dependensi dengan composer audit dan mengunci pemeriksaan itu di pipeline CI.

Buka →
# Private Packages

Pelajari cara mendistribusikan paket privat lewat VCS, path, Satis, dan artifact repositories dengan autentikasi yang aman.

Buka →
# Membuat Library PHP

Pelajari cara membangun library PHP sendiri mulai dari API, autoloading PSR-4, penomoran versi git, hingga publikasi ke Packagist.

Buka →

Bab 22 Form Handling dan Validation

# HTML Forms dan PHP

Pelajari cara membangun form HTML, menerima kirimanannya lewat $_GET dan $_POST, dan memprosesnya dengan aman.

Buka →
# GET vs POST

Pelajari cara memilih antara GET dan POST agar form Anda aman, bisa di-bookmark, dan berperilaku benar saat di-refresh.

Buka →
# Membaca Form Input

Pelajari cara membaca input form dari $_POST dan $_GET dengan aman, dari field sederhana hingga input bertipe array.

Buka →
# Validasi Server-Side

Pelajari cara membangun validasi di sisi server dengan PHP agar data buruk selalu tertolak sebelum diproses.

Buka →
# Sanitasi vs Validasi

Pelajari cara membedakan validasi dan sanitasi agar Anda tahu kapan input harus ditolak dan kapan cukup dirapikan.

Buka →
# Validasi Email dan URL

Pelajari cara memvalidasi email dan URL dengan filter_var beserta batas-batasnya dan cara menyusun beberapa validator.

Buka →
# Menangani Checkbox dan Select

Pelajari cara menangani checkbox, radio, dan select di PHP, termasuk validasi terhadap daftar pilihan yang diizinkan.

Buka →
# Menangani File Upload

Pelajari cara memproses upload berkas dari form dengan validasi menyeluruh sebelum menyimpannya secara aman.

Buka →
# Menampilkan Validation Errors

Pelajari cara menampilkan pesan error validasi dengan pola error bag, old input, dan dukungan aksesibilitas.

Buka →
# Post/Redirect/Get

Pelajari cara mencegah submit ganda pada form dengan pola Post/Redirect/Get dan respons 303 See Other.

Buka →
# Form Security

Pelajari cara membangun pertahanan form dengan validasi server-side, honeypot, rate limiting, dan kehati-hatian terhadap data klien.

Buka →

Bab 24 Database dan SQL

# Dasar Database Relasional

Pelajari konsep tabel, primary key, relasi, index, dan ACID sebagai fondasi sebelum berbicara dengan database lewat PHP.

Buka →
# Dasar SQL

Pelajari cara membaca dan mengubah data dengan SELECT, INSERT, UPDATE, DELETE, JOIN, dan fungsi agregat SQL.

Buka →
# Database Drivers

Pelajari cara memeriksa dan memilih ekstensi serta driver database yang tersedia di PHP.

Buka →
# PDO

Pelajari cara mengakses berbagai database dengan API PDO yang seragam melalui query, exec, dan prepare.

Buka →
# PDO Connections

Pelajari cara membuka koneksi PDO dengan DSN yang tepat, menyetel opsi, dan menangani kegagalan koneksi.

Buka →
# Prepared Statements

Pelajari cara memisahkan struktur SQL dari data dengan prepared statements untuk keamanan dan performa.

Buka →
# Parameter Binding

Pelajari cara mengikat nilai ke parameter prepared statement dengan bindValue, bindParam, dan array execute agar query aman dan konsisten.

Buka →
# Fetching Results

Pelajari cara mengambil hasil query dengan fetch, fetchAll, dan fetchColumn serta memilih fetch mode yang tepat untuk tiap kebutuhan.

Buka →
# Transactions

Pelajari cara memakai beginTransaction, commit, dan rollBack agar rangkaian query database berjalan utuh atau batal bersama-sama.

Buka →
# Transaction Management

Pelajari cara mengelola transaksi tingkat lanjut dengan savepoint, helper callback, isolation level, dan strategi menghindari deadlock.

Buka →
# Database Errors

Pelajari cara menangani error database dengan mode error PDO, kode SQLSTATE, dan pembungkusan exception agar aplikasi tetap terkendali.

Buka →
# SQL Injection Prevention

Pelajari cara mencegah SQL injection dengan prepared statements, allowlist nama kolom, dan escaping wildcard LIKE.

Buka →
# SQLite dengan PHP

Pelajari cara memakai SQLite dari PHP: DSN berkas dan :memory:, PRAGMA foreign_keys, mode WAL, serta kapan SQLite layak dipakai di produksi.

Buka →
# MySQL dengan PHP

Pelajari cara menyambungkan PHP ke MySQL: DSN utf8mb4, pilihan antara PDO dan mysqli, serta migrasi skema dari SQLite.

Buka →
# PostgreSQL dengan PHP

Pelajari cara memakai PostgreSQL dari PHP: DSN pgsql, klausa RETURNING, upsert ON CONFLICT, schema, dan kapan database ini jadi pilihan terbaik.

Buka →
# Repository Pattern

Pelajari cara membungkus akses PDO dalam repository class, mengekstrak interface, dan membuat kode aplikasi bebas dari SQL.

Buka →

Bab 26 Arsitektur Aplikasi

# Separation of Concerns

Pelajari cara memisahkan penanganan input, logika bisnis, dan output agar aplikasi PHP yang terus berkembang tetap mudah dirawat.

Buka →
# Layered Architecture

Pelajari cara menyusun aplikasi PHP menjadi lapisan presentation, application, domain, dan data dengan arah dependensi satu arah.

Buka →
# Controller-Service-Repository

Pelajari cara menerapkan layered architecture sebagai trio praktis controller, service, dan repository yang teruji tanpa HTTP.

Buka →
# Dependency Injection

Pelajari cara menyuntikkan dependency dari luar class agar kode PHP Anda longgar, mudah diuji, dan mudah diganti.

Buka →
# Dependency Inversion

Pelajari cara membalik arah dependensi agar modul tingkat tinggi berdiri di atas abstraksi, bukan di atas detail implementasi.

Buka →
# Interfaces dan Abstractions

Pelajari cara merancang kontrak yang tepat sempit, dimiliki konsumen, dan stabil agar implementasi bisa berganti tanpa guncangan.

Buka →
# Domain Modeling

Pelajari cara memodelkan konsep bisnis sebagai entity, value object, dan aggregate yang membawa perilakunya sendiri.

Buka →
# Data Transfer Objects

Pelajari cara mengemas data lintas lapisan dengan DTO readonly, mapper fromArray, dan penempatan validasi yang tepat.

Buka →
# Configuration Management

Pelajari cara mengelola konfigurasi aplikasi PHP mulai dari array, environment variable, berkas .env, hingga objek konfigurasi bertipe.

Buka →
# Application Bootstrap

Pelajari cara menyusun proses bootstrap aplikasi PHP dari front controller hingga fungsi boot yang eksplisit dan booting malas.

Buka →
# Memilih Arsitektur

Pelajari cara memilih arsitektur yang tepat sesuai ukuran proyek, faktor tim, dan sinyal evolusi agar tidak over- maupun under-engineering.

Buka →

Bab 27 Design Patterns dan Prinsip

# SOLID Principles

Pelajari lima prinsip desain SOLID untuk menulis class PHP yang longgar terhubung, mudah diuji, dan tahan terhadap perubahan.

Buka →
# Single Responsibility

Pelajari cara menerapkan Single Responsibility Principle di PHP dengan merombak God class menjadi kelas-kecil yang berkolinaborasi dan mudah diuji.

Buka →
# Open/Closed Principle

Pelajari cara memperluas perilaku program lewat class baru tanpa menyentuh kode lama yang sudah teruji.

Buka →
# Liskov Substitution

Pelajari cara menjaga kontrak class dasar agar setiap subclass aman dipertukarkan tanpa kejutan.

Buka →
# Interface Segregation

Pelajari cara memecah interface gemuk menjadi interface kecil yang fokus sesuai kebutuhan pemakainya.

Buka →
# Dependency Inversion

Pelajari cara membalik arah ketergantungan agar modul tingkat tinggi bergantung pada abstraksi, bukan implementasi.

Buka →
# Factory Pattern

Pelajari cara menyembunyikan proses pembuatan objek yang rumit lewat static factory dan factory method.

Buka →
# Strategy Pattern

Pelajari cara menukar algoritma di balik satu interface saat aplikasi berjalan untuk kode yang lentur dan mudah diuji.

Buka →
# Adapter Pattern

Pelajari cara menjembatani interface yang tidak cocok agar kode warisan dan SDK pihak ketiga tetap bisa dipakai.

Buka →
# Decorator Pattern

Pelajari cara menambah perilaku objek lewat pembungkus berlapis tanpa memicu ledakan subclass.

Buka →
# Observer Pattern

Pelajari cara menyiarkan kejadian ke banyak pendengar terdaftar agar produsen dan konsumen event saling lepas.

Buka →
# Repository Pattern

Pelajari cara memisahkan logika domain dari akses data lewat repository, query yang bernama, dan aggregate root.

Buka →
# Unit of Work Pattern

Pelajari cara menyatukan perubahan banyak entitas dalam satu transaksi database lewat unit of work dan change tracking.

Buka →
# Menghindari Overengineering

Pelajari cara menahan diri dari abstraksi spekulatif lewat YAGNI, aturan tiga, dan jalur evolusi sederhana-dulu.

Buka →

Bab 28 REST API Development

# Memahami REST

Pelajari cara memahami REST sebagai gaya arsitektur: resource, HTTP verb, representasi, statelessness, dan model kematangannya.

Buka →
# Resource Modeling

Pelajari cara menggali resource dari domain, merancang URL yang jujur, serta mengatur ID, slug, relasi, dan granularitas PATCH.

Buka →
# Routing dan Endpoints

Pelajari cara memetakan kombinasi HTTP method dan path ke handler PHP dengan router sederhana yang bisa diuji.

Buka →
# Request Parsing

Pelajari cara membaca dan mengurai JSON body, query string, dan header request dengan aman di API PHP.

Buka →
# Response Serialization

Pelajari cara mengubah data PHP menjadi respons JSON yang konsisten, aman, dan nyaman dibaca klien.

Buka →
# JSON APIs

Pelajari cara merakit handler API utuh yang menerima request, mengolah data, dan memancarkan respons JSON yang konsisten.

Buka →
# Status Codes dan Error Responses

Pelajari cara memilih status code yang tepat untuk setiap operasi API dan merancang bentuk error response yang konsisten.

Buka →
# Request Validation

Pelajari cara membangun lapisan validasi request yang teruji dengan aturan per field dan respons 422 yang informatif.

Buka →
# Pagination, Filtering, dan Sorting

Pelajari cara menerapkan pagination, filtering, dan sorting yang aman dari SQL injection pada endpoint daftar API Anda.

Buka →
# API Versioning

Pelajari cara mengelola beberapa versi API dengan strategi URL, header, dan content negotiation tanpa memutus klien lama.

Buka →
# OpenAPI Documentation

Pelajari cara menulis dokumentasi OpenAPI yang lengkap dan menjaga sinkronnya dengan router melalui test otomatis.

Buka →
# Rate Limiting

Pelajari cara membatasi laju permintaan API dengan fixed window, sliding window, dan token bucket untuk menjaga stabilitas layanan.

Buka →
# Idempotency

Pelajari cara membuat operasi POST aman diulang dengan pola Idempotency-Key agar klien yang gagal jaringan tidak menimbulkan efek ganda.

Buka →
# API Testing

Pelajari cara menguji REST API PHP secara berlapis, dari handler murni dengan assertion hingga test double dan database SQLite in-memory.

Buka →

Bab 29 Authentication dan Authorization

# Authentication vs Authorization

Pelajari perbedaan mendasar antara pembuktian identitas dan pemberian hak akses agar 401 dan 403 tidak pernah tertukar.

Buka →
# Password Hashing

Pelajari cara menyimpan kata sandi dengan password_hash dan password_verify agar database yang bocor tidak serta-merta membuka semua akun.

Buka →
# Registrasi Pengguna

Pelajari cara membangun alur registrasi yang aman mulai dari validasi email, aturan username, hashing password, hingga penanganan email duplikat.

Buka →
# Login dan Logout

Pelajari cara membangun alur login dan logout PHP: verifikasi password, pesan error generik, session, logout semua perangkat, hingga rate limiting.

Buka →
# Session-Based Authentication

Pelajari cara membangun autentikasi berbasis session: menyimpan user_id, resolusi current user, guard halaman privat, dan pencegahan session fixation.

Buka →
# Remember-Me

Pelajari cara mengintegrasikan token remember-me ke alur autentikasi: auto-login dari cookie, masa berlaku token, dan invalidasi saat password berubah.

Buka →
# Password Reset

Pelajari cara membangun alur reset password dengan token sekali pakai: permintaan, tautan email, verifikasi hash, jendela waktu, dan pencegahan user enumeration.

Buka →
# Email Verification

Pelajari cara membangun alur verifikasi email dengan token sekali pakai untuk memastikan alamat email benar-benar milik pengguna.

Buka →
# Role-Based Access Control

Pelajari cara menerapkan role-based access control untuk mengatur peran dan hak akses pengguna di aplikasi PHP.

Buka →
# Permission Modeling

Pelajari cara memodelkan permission sebagai satuan hak akses yang lebih halus dan fleksibel dibandingkan role.

Buka →
# API Token Authentication

Pelajari cara mengautentikasi klien API dengan personal access token yang di-hash, ber-scope, dan dapat dicabut.

Buka →
# OAuth2 dan OpenID Connect

Pelajari cara kerja OAuth2 dan OpenID Connect untuk login pihak ketiga dan delegasi akses tanpa mengelola sandi tambahan.

Buka →
# Multi-Factor Authentication

Pelajari cara menambah faktor kedua autentikasi dengan TOTP, kode cadangan, dan WebAuthn agar kata sandi yang dicuri tidak cukup untuk membuka akun.

Buka →
# Authentication Security

Pelajari checklist keamanan autentikasi lengkap: kebijakan kata sandi, rate limiting, pesan galat generik, anti-enumerasi, dan pencatatan peristiwa login.

Buka →

Bab 30 Web Security

# Secure Coding Principles

Pelajari prinsip penulisan kode yang aman — validasi input, escape output, least privilege, defense in depth, fail securely — sebelum membedah serangan satu per satu.

Buka →
# Output Escaping

Pelajari cara mengubah data menjadi aman saat ditampilkan: htmlspecialchars untuk HTML, json_encode untuk JavaScript, dan rawurlencode untuk URL.

Buka →
# Cross-Site Scripting

Pelajari anatomi serangan XSS — reflected, stored, dan DOM — beserta pertahanan berlapisnya dari escaping hingga CSP dan cookie HttpOnly.

Buka →
# Cross-Site Request Forgery

Pelajari anatomi serangan CSRF dan kerangka pertahanannya untuk melindungi aksi sensitif pengguna.

Buka →
# SQL Injection

Pelajari sudut pandang penyerang dalam SQL injection untuk memahami cara data bisa membaca, mengubah, dan menghapus database Anda.

Buka →
# Command Injection

Pelajari cara input pengguna membajak perintah shell dan cara membangun pemanggilan proses eksternal yang aman.

Buka →
# Path Traversal

Pelajari cara serangan ../ memanjat keluar direktori dan cara membangun pertahanan path yang kokoh.

Buka →
# File Upload Security

Pelajari cara memvalidasi dan menyimpan berkas upload agar fitur ini tidak menjadi pintu masuk penyerang.

Buka →
# Session Fixation

Pelajari alur serangan session fixation dan kombinasi pertahanan yang memutus rantainya.

Buka →
# Clickjacking

Pelajari cara mencegah clickjacking dengan header X-Frame-Options dan frame-ancestors yang dipancarkan dari PHP.

Buka →
# Security Headers

Pelajari cara memancarkan set lengkap security headers dari PHP dengan pola middleware yang mudah diuji.

Buka →
# CORS

Pelajari cara mengizinkan permintaan lintas domain secara aman dengan CORS dan penanganan preflight di PHP.

Buka →
# CSRF Tokens

Pelajari cara membuat, menyematkan, dan memvalidasi token CSRF dengan random_bytes dan hash_equals di PHP.

Buka →
# Content Security Policy

Pelajari cara membangun dan meluncurkan Content Security Policy sebagai lapisan kedua pertahanan XSS di PHP.

Buka →
# Secrets Management

Pelajari cara mengelola secret seperti API key dan password database dengan variabel lingkungan agar tidak pernah bocor ke kode dan riwayat git.

Buka →
# Dependency Security

Pelajari cara menilai risiko paket Composer sebelum diadopsi dan menjaga rantai pasokan dependensi aplikasi tetap aman.

Buka →
# Security Checklist

Pelajari cara menyusun dan menggunakan checklist keamanan agar pemeriksaan penting tidak terlewat saat code review dan review berkala.

Buka →

Bab 31 Cookies, Headers, dan Caching

# Mengirim HTTP Headers

Pelajari cara mengirim HTTP header dengan header() secara benar, dari aturan sebelum output hingga pola kumpulan header yang mudah diuji.

Buka →
# Response Status Codes

Pelajari cara mengatur response status code dengan http_response_code() dan memasangkannya dengan body serta redirect yang tepat.

Buka →
# Cookie Configuration

Pelajari cara mengonfigurasi cookie dari sisi respons PHP, dari opsi lengkap setcookie(), perhitungan kedaluwarsa, penghapusan, cakupan path dan domain, hingga cookie sesi yang aman.

Buka →
# Cache-Control

Pelajari cara menyusun header Cache-Control untuk mengendalikan cache browser, proxy, dan CDN serta melindungi halaman sensitif dari penyimpanan.

Buka →
# ETag dan Conditional Requests

Pelajari cara membangun ETag sebagai sidik jari konten dan menangani If-None-Match serta If-Modified-Since agar respons 304 menghemat bandwidth.

Buka →
# File Download Responses

Pelajari cara membangun respons unduhan berkas dengan Content-Disposition, streaming readfile dan fpassthru, penamaan non-ASCII RFC 5987, hingga pola X-Sendfile.

Buka →
# Redirect Responses

Pelajari cara membangun respons redirect yang benar, dari pemilihan kode dan Location relatif, pola POST-Redirect-GET dengan flash data, deteksi loop, hingga validasi open redirect.

Buka →
# Response Compression

Pelajari cara mengompresi respons HTTP dengan gzip dari PHP, menegosiasikan lewat Accept-Encoding, mengetahui apa yang tidak boleh dikompresi, dan mengirim Vary dengan benar.

Buka →

Bab 33 Caching dan Performance

# Memahami Performance

Pelajari cara memaknai performa aplikasi PHP dengan benar agar setiap optimasi yang Anda lakukan berdampak dan terukur.

Buka →
# Profiling PHP

Pelajari cara menemukan bagian kode PHP yang paling memakan waktu dengan timer manual, penghitung panggilan, dan Xdebug.

Buka →
# Benchmarking

Pelajari cara merancang micro-benchmark yang jujur dengan hrtime untuk membandingkan dua implementasi PHP secara adil.

Buka →
# Opcode Cache

Pelajari cara kerja OPcache dalam menyimpan bytecode PHP agar aplikasi tidak mengompilasi ulang semua berkas di setiap permintaan.

Buka →
# Application Caching

Pelajari cara menyimpan hasil komputasi mahal dengan cache aplikasi berbasis TTL dan kunci yang dirancang benar.

Buka →
# Cache Invalidation

Pelajari cara menjaga isi cache tetap segar dengan TTL, invalidasi berbasis event, key versioning, dan pola penulisan write-through.

Buka →
# Redis Caching

Pelajari cara menggunakan Redis sebagai cache eksternal: memilih client, menyiapkan koneksi, serialisasi nilai, dan pola read-through.

Buka →
# Query Optimization

Pelajari cara mengoptimalkan query database: menghitung query per request, membasmi masalah N+1, memanfaatkan indeks, dan paginasi keyset.

Buka →
# Reducing Memory Usage

Pelajari cara menekan pemakaian memori PHP dengan generator, fetch bertahap, streaming berkas, dan memahami siklus referensi.

Buka →
# Streaming Large Responses

Pelajari cara mengirim berkas besar dan ekspor CSV dengan memori kecil melalui readfile, generator, output buffering, dan flush.

Buka →
# Performance Testing

Pelajari cara menguji performa aplikasi PHP secara terukur dengan load test, statistik p95/p99, anggaran performa di CI, dan deteksi regresi.

Buka →

Bab 35 Testing dan Quality Assurance

# Memahami Software Testing

Pelajari cara berpikir seperti penguji: piramida pengujian, pola arrange-act-assert, dan ciri tes yang baik.

Buka →
# Unit Testing

Pelajari cara menulis unit test pertama Anda dengan assertion polos dan PHPUnit untuk fungsi murni.

Buka →
# Menginstal PHPUnit

Pelajari cara menginstal PHPUnit melalui berkas PHAR atau Composer untuk mulai menguji kode PHP secara otomatis.

Buka →
# Menulis PHPUnit Tests

Pelajari cara menulis kelas test PHPUnit: konvensi penamaan, assertion dasar, siklus hidup setUp/tearDown, dan exit code.

Buka →
# Assertions

Pelajari cara memilih dan menulis assertion PHPUnit yang tepat, dari assertSame sampai expectException dan assertion komposit.

Buka →
# Data Providers

Pelajari cara menguji banyak kasus sekaligus dengan data provider PHPUnit dan kasus bernama yang mudah didiagnosis.

Buka →
# Test Doubles

Pelajari cara mengganti dependensi nyata dengan dummy, stub, spy, dan fake buatan tangan agar unit test berjalan cepat dan deterministik.

Buka →
# Mocking

Pelajari cara mengisolasi dependensi dengan mock bawaan PHPUnit, mulai dari createMock, expectation, constraint argumen, hingga mengenali kapan mocking justru merugikan.

Buka →
# Integration Testing

Pelajari cara menguji beberapa komponen bekerja sama lewat integration test dengan seam yang disuntikkan, SQLite, test data builder, dan organisasi suite terpisah.

Buka →
# Database Testing

Pelajari cara menguji repository dan query SQL dengan PHPUnit memakai SQLite :memory:, seeding fixture, assertion hasil query, dan pola transaction rollback.

Buka →
# HTTP Testing

Pelajari cara menguji HTTP handler tanpa web server memakai objek Request dan Response murni, helper bergaya supertest, cookie tersuntik, hingga uji asap dengan php -S dan curl.

Buka →
# End-to-End Testing

Pelajari cara menyusun pengujian end-to-end dengan server sungguhan untuk membuktikan seluruh tumpukan aplikasi bekerja sebagai satu kesatuan.

Buka →
# Code Coverage

Pelajari cara membaca dan menafsirkan code coverage sebagai alarm asap kualitas, bukan angka yang dipuja.

Buka →
# Mutation Testing

Pelajari cara mengukur kekuatan suite test dengan mutation testing: suntikkan bug kecil satu per satu dan pastikan setiap mutan mati.

Buka →
# Static Analysis

Pelajari cara memasang static analysis sebagai gerbang pertama pipeline QA untuk menangkap bug sebelum kode sempat dijalankan.

Buka →
# Coding Standards

Pelajari cara menegakkan coding standards secara otomatis dengan PHP-CS-Fixer dan PHP_CodeSniffer agar seluruh tim menulis kode bergaya sama.

Buka →
# Continuous Integration

Pelajari cara merangkai lint, static analysis, dan test menjadi pipeline continuous integration otomatis dengan GitHub Actions.

Buka →

Bab 36 Debugging dan Observability

# Membaca Stack Traces

Pelajari cara membaca anatomi stack trace PHP untuk menelusuri akar masalah hingga ke baris sumbernya.

Buka →
# Debugging dengan Xdebug

Pelajari cara memasang dan mengonfigurasi Xdebug untuk step debugging, profil, dan output diagnostik yang lebih kaya.

Buka →
# Breakpoints dan Watch Expressions

Pelajari cara menghentikan eksekusi di titik yang tepat dengan breakpoint dan mengawasi nilai dengan watch expressions.

Buka →
# Logging

Pelajari cara membangun logging aplikasi PHP yang persisten, mulai dari logger berkas sederhana hingga format JSON lines.

Buka →
# Structured Logging

Pelajari cara menerapkan structured logging dengan field bernama, correlation ID, dan parsing grep/jq untuk log yang benar-benar bisa ditelusuri.

Buka →
# Log Levels dan Context

Pelajari cara memilih level log yang tepat dan menyertakan context terstruktur agar setiap kejadian mudah ditelusuri.

Buka →
# Error Reporting Configuration

Pelajari cara mengonfigurasi error reporting untuk development, staging, dan production agar error selalu tercatat tanpa membocorkan detail.

Buka →
# Application Metrics

Pelajari cara mengukur kesehatan aplikasi lewat metrics counter, gauge, dan histogram dengan format ekspor Prometheus.

Buka →
# Tracing

Pelajari cara mengikuti perjalanan satu request lintas layanan menggunakan trace, span, dan korelasi log.

Buka →
# Production Diagnostics

Pelajari cara mendiagnosis insiden produksi berbasis bukti: membaca log dengan aman, membandingkan canary, dan menulis postmortem.

Buka →

Bab 38 CLI dan Automation

# Membuat Command-Line Scripts

Pelajari cara membuat dan menjalankan skrip PHP langsung dari terminal untuk berbagai tugas otomasi.

Buka →
# Command-Line Arguments

Pelajari cara membaca, memilah, dan memvalidasi command-line arguments dengan $argv dan getopt.

Buka →
# stdin, stdout, dan stderr

Pelajari cara mengelola tiga stream standar agar skrip CLI Anda rapi, mudah dipipakan, dan ramah otomasi.

Buka →
# Exit Codes

Pelajari cara memakai exit codes dengan benar agar skrip PHP Anda dapat dipercaya oleh shell, pipeline, dan CI.

Buka →
# Console Applications

Pelajari cara menyusun skrip PHP menjadi aplikasi console utuh dengan dispatch perintah, output bantuan terstruktur, dan exit code yang konsisten.

Buka →
# Scheduled Jobs

Pelajari cara menjadwalkan skrip PHP dengan cron, mencegah tumpang tindih dengan flock, mencatat output job, dan menguji logika terjadwalnya.

Buka →
# Filesystem Automation

Pelajari cara menulis tool PHP yang mengganti nama berkas secara massal, merotasi arsip, membersihkan berkas tua, dan melapor hasilnya dengan aman.

Buka →
# Subprocesses

Pelajari cara memanggil program eksternal dari PHP dengan proc_open: mengelola pipe stdout dan stderr, meneruskan environment, membatasi waktu eksekusi, dan mengamankan argumen.

Buka →
# Configuration Files

Pelajari cara mengelola berkas konfigurasi untuk tool CLI, dari pencarian lokasi dan penggabungan default hingga validasi dan penanganan rahasia.

Buka →
# Distributing CLI Tools

Pelajari cara mengemas dan mendistribusikan tool CLI PHP Anda, dari berkas phar dan pemasangan Composer hingga konvensi --version dan README.

Buka →

Bab 41 Deployment dan Infrastructure

# Production Configuration

Pelajari cara menyetel konfigurasi PHP untuk produksi agar error tercatat, rahasia tersembunyi, dan performa maksimal.

Buka →
# Environment Variables

Pelajari cara membaca dan mengelola environment variables agar konfigurasi aplikasi PHP terpisah dari kode.

Buka →
# Managing Secrets

Pelajari cara menyimpan, memutar, dan melindungi secrets aplikasi PHP agar kredensial tidak bocor ke tempat yang salah.

Buka →
# PHP-FPM

Pelajari cara kerja dan konfigurasi PHP-FPM untuk menjalankan aplikasi PHP secara stabil di server produksi.

Buka →
# Nginx dan PHP

Pelajari cara mengonfigurasi Nginx sebagai web server dan reverse proxy yang meneruskan permintaan PHP ke PHP-FPM.

Buka →
# Apache dan PHP

Pelajari cara menjalankan PHP di Apache melalui mod_php dan mod_proxy_fcgi serta mengelola .htaccess dan virtual host.

Buka →
# Docker dan PHP

Pelajari cara mengemas aplikasi PHP ke dalam image Docker agar berjalan identik di development dan production.

Buka →
# Deployment Workflows

Pelajari cara membangun alur deployment yang atomik, teruji, dan bisa di-rollback dalam hitungan detik.

Buka →
# Database Deployment

Pelajari cara menjalankan schema migration dengan aman saat deploy: urutan expand-contract, cadangan, dan pemulihan kegagalan.

Buka →
# Health Checks

Pelajari cara merancang endpoint health check yang membedakan liveness dan readiness serta terintegrasi dengan load balancer.

Buka →
# Graceful Shutdown

Pelajari cara mematikan proses PHP dengan anggun: drain request in-flight, tangani SIGTERM, dan selesaikan pekerjaan berjalan.

Buka →
# Zero-Downtime Deployment

Pelajari cara merilis versi baru tanpa memutus satu pun request pengguna dengan symlink, blue-green, rolling, dan canary.

Buka →
# Production Readiness Checklist

Pelajari cara menyusun checklist kesiapan produksi lengkap beserta runbook rilis, smoke test otomatis, dan latihan rollback.

Buka →

Bab 42 Framework Development

# Memahami MVC

Pelajari cara memisahkan model, view, dan controller serta membangun siklus request MVC mini dalam PHP murni.

Buka →
# Membuat Router

Pelajari cara membangun router PHP sendiri dari registrasi rute, parameter pola, dispatch, hingga penanganan 404 dan 405.

Buka →
# Request-Response Abstractions

Pelajari cara membangun abstraksi Request dan Response immutable yang teruji sebagai fondasi framework mini Anda.

Buka →
# Middleware

Pelajari cara membangun pipeline middleware berlapis untuk memproses request dan response secara berurutan.

Buka →
# Controller Layer

Pelajari cara merancang controller yang ramping agar logika HTTP dan logika bisnis tetap terpisah rapi.

Buka →
# Template Rendering

Pelajari cara membangun mesin template PHP sendiri dengan escaping, layout, dan section yang aman.

Buka →
# Dependency Container

Pelajari cara membangun dependency container agar penyambungan objek tidak lagi ditulis manual.

Buka →
# Configuration System

Pelajari cara membangun sistem konfigurasi berlapis dengan dot access, override environment, dan validasi saat boot.

Buka →
# Exception Handling Layer

Pelajari cara membangun lapisan penahanan exception global untuk menjaga pengguna tetap menerima respons rapi saat terjadi kesalahan.

Buka →
# Routing Parameters

Pelajari cara menangkap parameter dinamis dari URL, memvalidasinya, hingga menghasilkan URL kembali dari definisi route.

Buka →
# Framework Testing

Pelajari cara menguji framework buatan sendiri mulai dari assertion router hingga test client yang menembus seluruh stack.

Buka →
# Batasan Framework Buatan Sendiri

Pelajari batasan jujur framework buatan sendiri, biaya pemeliharaannya, dan kapan saatnya beralih ke framework matang.

Buka →

Bab 43 Framework Ecosystem

# Memahami PHP Frameworks

Pelajari alasan framework PHP ada, apa yang mereka standarisasi, dan peta lanskap Laravel, Symfony, hingga Slim.

Buka →
# Laravel Fundamentals

Pelajari cara memasang Laravel, membaca struktur proyeknya, dan memakai Artisan, file .env, serta facade untuk memulai pengembangan dengan cepat.

Buka →
# Laravel Routing

Pelajari cara mendefinisikan route, parameter, named route, grouping, hingga rate limiting di Laravel untuk mengatur seluruh pintu masuk aplikasi.

Buka →
# Laravel Eloquent

Pelajari cara memakai Eloquent untuk memetakan tabel database ke model, relasi, query, dan eager loading tanpa menulis SQL manual.

Buka →
# Laravel Validation

Pelajari cara memvalidasi input di Laravel mulai dari aturan bawaan, Form Request, hingga Rule Object untuk menjaga kualitas data aplikasi.

Buka →
# Laravel Authentication

Pelajari cara membangun sistem login Laravel lengkap dari starter kit, guard, middleware auth, policy, hingga token API Sanctum.

Buka →
# Symfony Fundamentals

Pelajari cara membangun aplikasi dengan Symfony: filosofi komponen, routing, controller, services, autowiring, hingga siklus rilis LTS.

Buka →
# Symfony Components

Pelajari cara memakai komponen Symfony secara mandiri melalui Composer untuk memperkuat aplikasi PHP apa pun.

Buka →
# Slim Framework

Pelajari cara membangun API ringan dengan Slim Framework di atas standar PSR-7 dan middleware PSR-15.

Buka →
# Memilih Framework PHP

Pelajari cara menimbang faktor tim, proyek, dan ekosistem untuk memilih framework PHP secara rasional.

Buka →

Bab 45 Proyek PHP

# Proyek: Kalkulator Terminal

Bangun kalkulator interaktif berbasis terminal: struktur program, operasi aritmatika, validasi input, hingga error handling dan testing.

Lihat proyek →
# Proyek: Pengelola Daftar Tugas

Bangun aplikasi manajemen tugas berbasis CLI dengan penyimpanan JSON, validasi, error handling, refactor berorientasi objek, dan testing.

Lihat proyek →
# Proyek: Aplikasi Kontak

Bangun aplikasi kontak berbasis database: desain schema SQLite, operasi CRUD, pencarian, validasi integritas, dan testing repository.

Lihat proyek →
# Proyek: Website Blog

Bangun website blog utuh dengan PHP murni: routing, template, database, admin CRUD, authentication, keamanan, testing, dan deployment.

Lihat proyek →
# Proyek: REST API Manajemen Tugas

Bangun REST API JSON dari nol: fondasi, routing, repository database, validasi, token authentication, testing, OpenAPI, dan deployment.

Lihat proyek →
# Proyek: Sistem Inventaris

Bangun sistem inventaris: desain database produk-kategori, stock movements, transaksi, laporan, pencarian, testing, dan deployment.

Lihat proyek →
# Proyek: Sistem Autentikasi

Bangun sistem autentikasi utuh: user schema, registrasi dengan password hashing, login session, role permission, reset, dan security testing.

Lihat proyek →
# Proyek: Aplikasi Keuangan Pribadi

Bangun aplikasi pencatat keuangan: domain model, akun-kategori, transaksi, budget berulang, laporan, import-export, testing, deployment.

Lihat proyek →
# Proyek: Sistem Pemesanan

Bangun sistem pemesanan end-to-end: pelanggan-produk, order dan item, order processing, transaksi inventaris, payment, reporting, testing.

Lihat proyek →
# Proyek: Aplikasi SaaS Multi-Tenant

Bangun aplikasi SaaS multi-tenant: domain tenant, isolasi data, membership permission, billing subscription, audit, background jobs, deployment.

Lihat proyek →
# Proyek: Library PHP Reusable

Rilis library PHP Anda sendiri: struktur package, namespace PSR-4, public API, unit testing, static analysis, build, dan publishing.

Lihat proyek →