Tutorial PHP dengan Contoh yang Bisa Dijalankan
Tutorial dan referensi PHP 8 gratis: array, foreach, fungsi string, tanggal, formulir, class, dan error. Setiap contoh berjalan di halaman, dan contoh yang mencetak HTML menampilkan halamannya, lengkap dengan formulir yang bisa kamu kirim.
Mulai kursusMemulai
- Apa itu PHP?PHP adalah bahasa scripting server-side: file PHP berjalan di web server dan mengirimkan HTML yang dibuatnya ke browser. PHP menjalankan WordPress, Laravel, dan sebagian besar web, dan juga bisa menjalankan script dari command line.
- Install PHPInstall PHP dengan satu perintah: winget di Windows, Homebrew di macOS, apt atau dnf di Linux. Lalu jalankan php -v di terminal untuk memastikan PHP berfungsi dan melihat versi yang kamu punya.
- Menjalankan PHPJalankan file PHP dari terminal dengan php index.php, atau tampilkan sebuah folder di browser dengan server bawaan PHP: php -S localhost:8000. Keduanya tidak butuh Apache atau XAMPP.
- echo dan printecho mencetak satu string atau lebih: echo "Hello, $name"; atau echo $a, $b;. Inilah cara yang biasa untuk mengirim teks atau HTML ke halaman. print melakukan hal yang sama dengan satu nilai dan mengembalikan 1; <?= $x ?> adalah bentuk singkatnya di dalam HTML.
- Error ReportingUntuk menampilkan semua error PHP, taruh ini_set('display_errors', '1'); dan error_reporting(E_ALL); di bagian atas script, atau atur display_errors = On dan error_reporting = E_ALL di php.ini. Di production, catat error ke log alih-alih menampilkannya.
- PHP vs PythonPHP dibuat untuk web: sebuah file dijalankan untuk setiap request dan mencetak halaman, dan PHP menjadi fondasi WordPress serta Laravel. Python adalah bahasa serbaguna yang juga dipakai untuk web (Django, Flask) dan mendominasi data science, otomatisasi, serta machine learning.
- PHP vs JavaScriptPHP berjalan di server dan mengirim HTML yang sudah jadi ke browser. JavaScript berjalan di browser, tempat ia mengubah halaman setelah dimuat, dan di server dengan Node.js. Sebagian besar website memakai keduanya: PHP untuk membuat halaman dan API, JavaScript untuk interaksi.
Dasar
- VariabelVariabel PHP diawali dengan $ dan dibuat dengan memberinya nilai: $name = "Ada";. Tidak ada kata kunci deklarasi dan tidak ada tipe yang tetap. Fungsi tidak bisa melihat variabel dari luar kecuali kamu memberikannya, memakai global, atau menangkapnya; static menyimpan nilai di antara pemanggilan.
- Tipe DataPHP punya sepuluh tipe: empat skalar (int, float, string, bool), empat tipe gabungan (array, object, callable, iterable), dan dua tipe khusus (null, resource). var_dump($x) menampilkan tipe dan nilai, sedangkan gettype($x) mengembalikan nama tipenya.
- StringGabungkan string PHP dengan operator titik ("Hello, " . $name) atau taruh variabel langsung di dalam tanda kutip ganda ("Hello, $name"). Tanda kutip tunggal mencetak teks apa adanya. Pelajari penggabungan string, .=, interpolasi array dan objek, serta mengubah huruf besar kecil dengan strtoupper, strtolower, ucfirst, dan ucwords.
- Heredoc dan NowdocHeredoc PHP adalah string multibaris yang diawali <<<EOT dan diakhiri EOT; isinya mengganti variabel seperti string dengan tanda kutip ganda. Nowdoc, <<<'EOT', menjaga teks persis seperti yang ditulis. Pelajari sintaks, aturan indentasi, interpolasi array dan object, serta template HTML.
- OperatorOperator PHP bekerja pada nilai: +, -, *, /, %, ** untuk aritmetika, =, +=, .=, ??= untuk assignment, &&, ||, ! dan xor untuk logika, . untuk menggabungkan string, ==, ===, <=> untuk perbandingan, dan ++, -- untuk increment. Pelajari setiap kelompok dengan contoh yang bisa dijalankan, ditambah jebakan prioritas and vs &&.
- Operator PerbandinganPHP membandingkan nilai dengan == (sama setelah type juggling), === (nilai sama dan tipenya sama), != dan !==, < > <= >= serta operator spaceship <=>. Pelajari kapan == mengonversi tipe, apa yang berubah di PHP 8, dan lihat semua perbandingan longgar dan strict dalam satu tabel.
- Operator ternaryOperator ternary PHP adalah if/else dalam satu baris: $result = $condition ? 'yes' : 'no';. Pelajari short ternary ?: (operator Elvis), bedanya dengan ??, kenapa ternary bertingkat butuh tanda kurung sejak PHP 8, dan kapan match menjadi pilihan yang lebih rapi.
- Null Coalescing ??Operator null coalescing PHP mengembalikan sisi kirinya kecuali bernilai null atau belum diisi: $name = $_GET['name'] ?? 'Guest';. Operator ini tidak pernah memberi warning tentang variabel atau key array yang tidak ada. Pelajari rantai ??, assignment ??=, ?? vs ?:, dan operator nullsafe ?->.
- Type castingUbah string PHP menjadi integer dengan (int) $str atau intval($str); (int) "42" menghasilkan 42 dan (int) "12abc" menghasilkan 12. Pelajari casting ke int, float, bool, string, dan array, string numerik, intval dengan basis bilangan, settype, dan cara memvalidasi input supaya tidak diam-diam mendapat 0.
- KonstantaKonstanta PHP adalah nama untuk nilai yang tidak bisa berubah: const MAX_USERS = 100; atau define('MAX_USERS', 100);. Pelajari define vs const, konstanta array, konstanta class dengan self::, memeriksanya dengan defined(), dan magic constant __LINE__, __FILE__, __DIR__, serta __CLASS__.
- isset()isset($var) mengembalikan true saat variabel ada dan tidak bernilai null, dan false jika tidak, tanpa warning apa pun. Fungsi ini juga memeriksa key array dan property object: isset($user['email']). Pelajari isset dengan beberapa variabel, key bersarang, isset vs empty, isset vs array_key_exists, dan memeriksa pengiriman form.
- empty()empty($var) mengembalikan true saat sebuah variabel tidak ada atau bernilai falsy: null, false, 0, 0.0, "", "0", atau []. Fungsi ini tidak pernah memunculkan warning untuk variabel atau key yang belum didefinisikan. Pelajari kenapa "0" dianggap kosong, cara memeriksa string atau array kosong secara persis, empty vs isset, dan validasi input formulir.
- Matematika dan Pembulatanround($x, 2) membulatkan ke dua angka desimal, floor() selalu membulatkan ke bawah, dan ceil() selalu membulatkan ke atas. Juga intdiv(), operator %, ** untuk pangkat, abs(), max(), min(), dan random_int() untuk angka acak.
Alur Kontrol
- if, elseif, elseif (condition) { ... } menjalankan blok hanya saat kondisinya true, elseif memeriksa kondisi berikutnya, dan else berjalan saat tidak ada yang cocok. Membahas elseif vs else if, && dan ||, nilai truthy, serta sintaks if: endif; untuk template HTML.
- Pernyataan switchswitch ($value) membandingkan satu nilai dengan daftar label case dan menjalankan kode mulai dari kecocokan pertama sampai bertemu break. Membahas beberapa case untuk satu blok, fallthrough, default, switch(true), dan kenapa switch memakai perbandingan longgar ==.
- Ekspresi matchmatch ($x) { 1, 2 => 'low', default => 'other' } membandingkan sebuah nilai dengan === yang strict, mengembalikan hasil dari arm pertama yang cocok, dan melempar UnhandledMatchError saat tidak ada yang cocok. Membahas match vs switch, match(true), dan match dengan enum.
- for Loopfor ($i = 0; $i < 10; $i++) { ... } menjalankan sebuah blok sebanyak jumlah tertentu: nilai awal, kondisi yang diperiksa sebelum setiap putaran, dan langkah. Membahas cara menelusuri array lewat indeks, menghitung mundur, loop bersarang, break, dan continue.
- Loop whilewhile (condition) { ... } mengulang sebuah blok selama kondisinya true, dan memeriksanya sebelum setiap putaran. do { ... } while (condition); memeriksanya sesudahnya, jadi selalu berjalan setidaknya sekali. Membahas while (true) dengan break, membaca file baris demi baris, dan cara menghindari infinite loop.
- Loop foreachforeach ($array as $value) mengunjungi setiap elemen array, dan foreach ($array as $key => $value) memberimu key-nya juga. Halaman ini membahas cara mendapatkan indeks, mengubah nilai lewat referensi beserta jebakan unset(), break dan continue, array bersarang, list() di foreach, dan membuat HTML.
Array
- ArrayArray PHP adalah list nilai yang berurutan, dan setiap nilai disimpan di sebuah key: $fruits = ['apple', 'banana']; dibaca sebagai $fruits[0]. Pelajari cara membuat array, membaca dan mengubah elemen, menelusurinya dengan loop, mencetaknya, dan fungsi array mana yang perlu dipakai.
- Array AsosiatifArray asosiatif PHP menyimpan nilai di bawah key yang kamu beri nama: $user = ['name' => 'Ada', 'age' => 36]; dibaca sebagai $user['name']. Pelajari cara menambah, mengubah, dan menghapus pasangan, menelusuri key dan nilai dengan loop, mengambil semua key atau nilai, memeriksa key, serta mengurutkan berdasarkan key atau nilai.
- Array MultidimensiArray multidimensi di PHP adalah array yang elemen-elemennya berupa array, dibaca dengan satu kurung siku per level: $grid[1][2] atau $users[0]['name']. Pelajari cara membuat array bersarang, membaca dan mengubah nilai yang dalam, perulangan dengan foreach bersarang, membuat tabel HTML, mengambil satu kolom, dan mengurutkan baris.
- array_push()array_push($arr, $value) menambahkan satu nilai atau lebih ke akhir array; $arr[] = $value melakukan hal yang sama untuk satu nilai dan lebih cepat. Pelajari cara menambah elemen di akhir, di awal, atau di tengah array, menambah key dan nilai, serta menghindari bug klasik nilai kembalian.
- count()count($arr) mengembalikan jumlah elemen dalam array PHP, jadi count(['a', 'b', 'c']) bernilai 3. Pelajari cara menghitung array bersarang dengan COUNT_RECURSIVE, hubungan sizeof() dengan count(), cara menghitung nilai yang cocok, dan kenapa count(null) melempar TypeError sejak PHP 8.
- in_array()in_array($needle, $haystack) mengembalikan true saat nilainya ada di array. Berikan true sebagai argumen ketiga untuk pemeriksaan strict, in_array('1', $ids, true), agar tipenya juga harus cocok. Pelajari flag strict, pencarian yang tidak membedakan huruf besar dan kecil, memeriksa beberapa nilai, array bersarang, dan alternatif isset yang cepat.
- array_search()array_search($value, $array) mengembalikan key dari elemen pertama yang sama dengan $value, atau false kalau tidak ada. Karena key-nya bisa 0, selalu uji hasilnya dengan !== false. Pelajari pencarian strict, mencari semua yang cocok, mencari di array multidimensi dengan array_column, dan pencarian tanpa membedakan huruf besar kecil.
- array_key_exists()array_key_exists('key', $array) mengembalikan true saat array punya key itu, bahkan kalau nilainya null. isset($array['key']) lebih cepat tetapi mengembalikan false untuk nilai null. Pelajari perbedaannya, key_exists(), key bersarang, memeriksa beberapa key, dan kenapa objek butuh property_exists().
- array_merge()array_merge($a, $b) menggabungkan beberapa array menjadi satu: nilai dengan key numerik ditambahkan di akhir dan dinomori ulang, sedangkan untuk key string, array yang belakangan yang menang. Pelajari bedanya array_merge dengan operator + dan sintaks spread [...$a, ...$b], cara menggabungkan list berisi array, dan kapan array_merge_recursive atau array_replace lebih cocok.
- array_map()array_map($callback, $array) memanggil callback pada setiap elemen dan mengembalikan array baru berisi hasilnya. Pelajari arrow function, key, memetakan beberapa array sekaligus, dan kapan array_walk atau foreach lebih cocok.
- array_filter()array_filter($array, $callback) menyimpan elemen yang membuat callback mengembalikan true. Pelajari cara menghapus nilai kosong, memfilter berdasarkan key dengan ARRAY_FILTER_USE_KEY, menomori ulang hasilnya dengan array_values, dan menjumlahkan dengan array_reduce.
- Mengurutkan arraysort($array) mengurutkan list secara langsung, asort dan ksort mengurutkan array asosiatif berdasarkan nilai atau key, dan usort mengurutkan dengan perbandinganmu sendiri. Pelajari semuanya, urutkan array multidimensi berdasarkan satu kolom, dan hindari kesalahan klasik $sorted = sort($arr).
- Hapus dari arrayunset($array[$key]) menghapus elemen berdasarkan key, array_splice menghapus berdasarkan posisi lalu menomori ulang, dan array_diff menghapus berdasarkan nilai. Pelajari masing-masing, cara mengatur ulang index sesudahnya, dan jebakan array_search yang menghapus elemen yang salah.
- array_slice()array_slice($array, $offset, $length) mengembalikan salinan sebagian array tanpa mengubah array aslinya. Pelajari offset negatif untuk item terakhir, preserve_keys, membagi list menjadi halaman, dan bedanya dengan array_splice.
- array_unique()array_unique($array) menghapus nilai duplikat dan menyimpan kemunculan pertama dari setiap nilai, lengkap dengan key aslinya. Pelajari cara menomori ulang hasilnya, menghapus duplikat tanpa membedakan huruf besar kecil, membuat array multidimensi unik, serta menghitung atau menemukan duplikatnya.
- array_column()array_column($rows, 'email') mengembalikan field email dari setiap baris sebagai array datar. Pelajari argumen index key, mengindeks ulang baris berdasarkan id, memakainya dengan objek, dan mencari baris dengan array_search.
- Destructuring dan list()[$a, $b] = $array mengisi dua elemen pertama ke $a dan $b dalam satu baris, dan ['name' => $name] = $user melakukan hal yang sama berdasarkan key. list() adalah penulisan lamanya. Membahas cara melewati elemen, menukar variabel, mengembalikan beberapa nilai, destructuring di foreach, dan spread operator ....
String
- explode()explode(',', $string) memecah string di setiap koma dan mengembalikan potongan-potongannya sebagai array. Pelajari parameter limit, memecah berdasarkan baris baru, memangkas spasi pada potongan, dan kapan str_split atau preg_split lebih cocok.
- implode()implode(', ', $array) menggabungkan nilai-nilai array menjadi satu string dengan pemisah di antaranya. Pelajari implode dengan key, array asosiatif, membuat list HTML, dan perbedaan implode dan join.
- str_replace()str_replace($search, $replace, $subject) mengganti setiap kemunculan $search dengan $replace. Pelajari array berisi nilai yang dicari dan penggantinya, cara menghitung penggantian, str_ireplace yang tidak peka huruf besar kecil, dan cara mengganti kemunculan pertama saja.
- substr()substr($string, $offset, $length) mengembalikan sebagian dari sebuah string. Pelajari offset negatif, cara mengambil karakter pertama atau terakhir, mb_substr untuk teks Jepang dan teks UTF-8 lainnya, substr_count, dan cara memotong teks dengan elipsis.
- strpos()strpos($haystack, $needle) mengembalikan posisi kemunculan pertama $needle, atau false kalau tidak ditemukan. Pelajari pemeriksaan !== false, stripos yang tidak peka huruf besar kecil, kecocokan terakhir dengan strrpos, dan cara menemukan setiap kemunculan.
- str_contains()str_contains($haystack, $needle) mengembalikan true kalau $needle muncul di bagian mana pun dari $haystack. Pelajari versi yang tidak peka huruf besar kecil, str_starts_with dan str_ends_with, cara memeriksa beberapa kata, dan versi strpos untuk PHP 7.
- trim()trim($string) menghapus spasi, tab, dan baris baru dari kedua ujung string; ltrim() dan rtrim() membersihkan satu sisi saja. Pelajari cara men-trim karakter tertentu, spasi lebar penuh Jepang, dan setiap nilai di sebuah array.
- strlen()strlen($string) mengembalikan panjang string dalam byte; mb_strlen($string) mengembalikannya dalam karakter. Pelajari kenapa teks Jepang dan emoji memberi jawaban yang berbeda, cara memeriksa string kosong, dan cara memvalidasi panjang input.
- sprintf()sprintf() menyusun string dari sebuah format dan nilai-nilai: sprintf('%05.2f', 3.14159) mengembalikan "03.14". Pelajari %s, %d, dan %f, padding nol, jumlah desimal tetap, perataan teks, penomoran argumen, printf, dan vsprintf.
- number_format()number_format(1234567.891, 2) mengembalikan "1,234,567.89": fungsi ini membulatkan ke jumlah desimal yang diberikan dan menambahkan pemisah ribuan. Pelajari keempat parameternya, format Eropa dan Jepang, cara pembulatannya, dan kenapa hasilnya berupa string.
- Baris baruUntuk mencetak baris baru di PHP, tulis "\n" di dalam tanda kutip ganda atau pakai PHP_EOL. Di halaman web, baris baru tidak terlihat, jadi pakai <br> atau nl2br(). Pelajari perbedaannya, kenapa '\n' di dalam tanda kutip tunggal tidak berfungsi, dan cara memecah atau menghapus baris baru.
- preg_match()preg_match($pattern, $subject, $matches) menguji sebuah string terhadap regular expression dan mengembalikan 1 jika cocok, 0 jika tidak. Pelajari capture group, named group, preg_match_all, anchor, pola validasi, dan modifier u untuk teks UTF-8 dan Jepang.
- preg_replace()preg_replace($pattern, $replacement, $subject) mengganti setiap kecocokan regular expression: preg_replace('/\s+/', ' ', $text) meringkas whitespace. Pelajari backreference seperti $1, preg_replace_callback, cara menghapus karakter non-alfanumerik, limit, dan jumlah penggantian.
Fungsi
- FungsiDefinisikan fungsi PHP dengan function name($param) { return $value; }. Pelajari nilai return, parameter default, named argument, passing by reference, deklarasi tipe dengan strict_types, tipe nullable dan union, serta variadic ...$args.
- Arrow FunctionArrow function adalah fungsi anonim berisi satu ekspresi yang ditulis fn($x) => $x * 2. Fungsi ini otomatis memakai variabel dari luar, sebagai nilai, tanpa use. Pelajari sintaksnya, cara penangkapan variabel bekerja, tipe, callback untuk array_map dan usort, serta kapan sebaiknya memakai closure lengkap.
- Fungsi AnonimFungsi anonim (closure) adalah fungsi tanpa nama yang disimpan di variabel: $greet = function ($name) { return "Hi $name"; };. Pelajari kata kunci use, menangkap variabel lewat referensi, callable, sintaks first-class callable strlen(...), dan closure di dalam class.
- GeneratorGenerator adalah fungsi yang memakai yield untuk menyerahkan nilai satu per satu, sehingga foreach bisa menelusuri sejuta item tanpa membuat array. Pelajari yield, key, penghematan memori, deret tanpa akhir, yield from, send(), dan getReturn().
Class dan Objek
- Class dan ObjekClass PHP adalah cetak biru yang dideklarasikan dengan `class Name { }`, dan `new Name()` membuat objek darinya. Pelajari property, method, `$this`, public/private/protected, property bertipe dan readonly, `__toString`, dan kenapa menyimpan objek ke variabel lain tidak menyalinnya.
- ConstructorConstructor PHP adalah method `__construct()`, yang berjalan otomatis saat kamu menulis `new ClassName(...)`. Pelajari constructor property promotion, nilai bawaan dan named argument, validasi, `parent::__construct()`, dan cara meniru beberapa constructor dengan static factory method.
- InheritanceDi PHP sebuah class mewarisi class lain dengan `class Dog extends Animal`: ia mendapat property dan method public serta protected milik parent, bisa meng-override-nya, dan tetap bisa memanggil versi aslinya dengan `parent::method()`. Pelajari override, protected, final, instanceof, dan jebakan method private.
- InterfaceInterface PHP mendaftar method yang dijanjikan sebuah class: `interface Shape { public function area(): float; }`, lalu `class Circle implements Shape` wajib mendefinisikan `area()`. Pelajari type hint dengan interface, mengimplementasikan beberapa interface, konstanta interface, interface yang meng-extend interface lain, interface bawaan seperti Countable, dan interface vs abstract class.
- Abstract ClassAbstract class di PHP dideklarasikan dengan `abstract class Name` dan tidak bisa diinstansiasi: class ini ada untuk diturunkan. Isinya bisa property, constructor, dan method yang sudah lengkap, ditambah method `abstract` tanpa body yang wajib diimplementasikan oleh setiap class turunan.
- TraitTrait PHP adalah blok method dan property yang bisa dipakai ulang dan kamu salin ke dalam class dengan `use TraitName;`. Pelajari cara memakai beberapa trait, menyelesaikan bentrok nama dengan `insteadof` dan `as`, member trait yang abstract dan static, method mana yang menang, serta trait vs interface vs abstract class.
- EnumEnum PHP (8.1+) adalah tipe dengan daftar nilai yang tetap: `enum Status: string { case Active = 'active'; }`. Pelajari pure enum dan backed enum, `->value` dan `->name`, konversi dengan `from()` dan `tryFrom()`, menampilkan semua case dengan `cases()`, method, konstanta, interface, dan enum di `match`.
- Static methodMethod atau property `static` milik class, bukan milik objek: kamu memanggilnya dengan `ClassName::method()` dan membacanya dengan `ClassName::$count`, tanpa perlu `new`. Pelajari `self::` vs `static::` (late static binding), `new static`, variabel static di dalam fungsi, dan kapan static bukan alat yang tepat.
- NamespaceNamespace PHP mengelompokkan class, fungsi, dan konstanta di bawah sebuah prefix: `namespace App\Models;` di bagian atas file, lalu `use App\Models\User;` di tempat lain untuk merujuk class itu dengan nama pendeknya. Pelajari fully qualified name, alias `use ... as`, `use function`, backslash di depan untuk class global, dan autoloading PSR-4.
Error dan Exception
- try catchDi PHP, kode yang mungkin gagal ditaruh di blok `try { }`, dan `catch (Exception $e) { }` dijalankan kalau kode itu melempar exception, dengan alasannya di `$e->getMessage()`. Pelajari cara menangkap beberapa tipe exception, `finally`, kenapa `catch (Exception)` tidak menangkap `TypeError` dan `DivisionByZeroError` (tangkap `Throwable`), melempar ulang, dan handler global.
- ExceptionKamu melempar exception di PHP dengan `throw new Exception('message');`, dan pemanggil membacanya dengan `$e->getMessage()` di blok `catch`. Pelajari class exception bawaan, cara menulis exception sendiri, `getCode()`, `getLine()`, dan `getPrevious()`, `throw` sebagai ekspresi, serta error yang dilempar PHP sendiri seperti `ValueError` dan `TypeError`.
Data, File, dan Web
- json_encode()json_encode($value) mengubah array, object, atau nilai skalar PHP menjadi string JSON. Array asosiatif menjadi object JSON, list menjadi array JSON, dan flag seperti JSON_PRETTY_PRINT dan JSON_UNESCAPED_UNICODE mengatur output-nya.
- json_decode()json_decode($json, true) mengubah string JSON menjadi array asosiatif PHP; tanpa true kamu mendapat object stdClass. Pelajari nilai bersarang, penanganan error dengan JSON_THROW_ON_ERROR, json_validate(), dan kenapa json_decode mengembalikan null.
- date()date('Y-m-d') mengembalikan tanggal hari ini sebagai string, dan date('Y-m-d', $timestamp) memformat Unix timestamp apa pun. Pelajari time(), mktime(), strtotime(), DateTimeImmutable, menambah hari, selisih dua tanggal, dan zona waktu, dengan contoh yang bisa kamu jalankan.
- Format TanggalFormat tanggal PHP adalah string berisi huruf seperti 'Y-m-d H:i:s', dengan Y untuk tahun 4 digit, m untuk bulan, d untuk hari, H untuk jam, i untuk menit, dan s untuk detik. Di sini ada setiap karakter format beserta contohnya, ditambah cara escape, ISO 8601, tanggal Jepang, dan mengubah satu format ke format lain.
- file_get_contents()file_get_contents('notes.txt') membaca seluruh isi file dan mengembalikannya sebagai satu string, atau false kalau gagal. Pasangannya, file_put_contents(), menulis string ke file, dan file() mengembalikan baris-barisnya sebagai array.
- fopen()fopen('data.txt', 'r') membuka file dan mengembalikan handle, atau false kalau gagal. Baca dari handle itu dengan fgets() atau fread(), tulis dengan fwrite(), dan tutup dengan fclose(). Mode-nya ('r', 'w', 'a', 'x', 'c', dan bentuk + dari masing-masing) menentukan apa yang bisa kamu lakukan.
- include dan requireinclude 'header.php'; menjalankan file PHP lain di titik itu, seolah-olah kodenya ditempel di sana. require melakukan hal yang sama tetapi menghentikan script dengan fatal error saat file-nya tidak ada, sedangkan include hanya memberi warning lalu lanjut. include_once dan require_once memuat file hanya pada kali pertama.
- FormForm PHP mengirim data ke dirinya sendiri dengan <form method="post">, lalu script membaca field dari $_POST['name'] saat $_SERVER['REQUEST_METHOD'] bernilai 'POST'. Pelajari validasi, pesan error di samping field, menjaga nilai yang sudah diisi, checkbox dan select, serta escaping output.
- $_GET dan $_POST$_GET berisi query string dari URL (?page=2 menghasilkan $_GET['page']) dan $_POST berisi field form yang dikirim dengan method="post". Pelajari cara membaca keduanya dengan aman, membuat link dengan http_build_query, memeriksa $_SERVER['REQUEST_METHOD'], dan memilih antara GET dan POST.
- htmlspecialchars()htmlspecialchars($text) mengubah lima karakter yang punya arti di HTML (& < > " ') menjadi entity, sehingga input pengguna ditampilkan sebagai teks alih-alih dijalankan sebagai markup. Pelajari ENT_QUOTES, escape atribut, double encoding, htmlentities, dan strip_tags.
- Session dan cookiePanggil session_start() di bagian paling atas setiap halaman, lalu simpan nilai di $_SESSION['key']; PHP menyimpannya di server dan mengenali pengunjung lewat sebuah cookie. setcookie('name', 'value', $options) menyimpan nilai kecil di browser, yang dibaca kembali dari $_COOKIE. Pelajari login, logout, flash message, opsi cookie, dan pengaturan keamanannya.
- password_hash()Hash sebuah password dengan password_hash($password, PASSWORD_DEFAULT), simpan hasilnya yang berukuran 60 karakter, lalu periksa login dengan password_verify($password, $hash). Pelajari kenapa hash-nya berubah setiap kali, cost, password_needs_rehash, Argon2id, dan kenapa md5 serta sha1 salah untuk password.
- filter_var()filter_var($value, FILTER_VALIDATE_EMAIL) mengembalikan nilainya kalau valid dan false kalau tidak; FILTER_VALIDATE_INT, FILTER_VALIDATE_URL, FILTER_VALIDATE_BOOL, dan FILTER_VALIDATE_IP bekerja dengan cara yang sama. Pelajari opsinya (min_range, default), flag, filter sanitize, dan jebakan false vs 0.
- PDOPDO adalah lapisan database PHP: buat koneksi dengan new PDO('mysql:host=localhost;dbname=shop;charset=utf8mb4', $user, $pass), lalu jalankan setiap query yang berisi nilai lewat prepare() dan execute([$value]). Pelajari koneksi, prepared statement, mengambil baris, insert, transaksi, dan WHERE IN.
- ComposerComposer adalah package manager untuk PHP: composer require vendor/package mengunduh library ke vendor/, mencatatnya di composer.json, lalu require 'vendor/autoload.php' memuatnya. Pelajari cara menginstal Composer, composer.json, batasan versi, install vs update, dan autoloading PSR-4 untuk class milikmu sendiri.
Debugging dan Latihan
- var_dump() dan print_r()print_r($array) mencetak array dalam bentuk yang mudah dibaca, var_dump($value) juga menampilkan setiap tipe dan panjangnya, dan var_export mencetak kode PHP yang valid. Pelajari kapan memakai masing-masing, cara mendapatkan print_r sebagai string, dan cara menampilkannya dengan rapi di HTML memakai <pre>.
- Pertanyaan Interview24 pertanyaan interview PHP dengan jawaban singkat dan benar untuk PHP 8, dari == vs === dan isset vs empty sampai referensi di foreach, self vs static, generator, SQL injection, dan hashing password. Sebagian besar jawaban dilengkapi kode yang bisa kamu jalankan dan ubah.