Menu

Pertanyaan Interview PHP dan Jawabannya (PHP 8)

24 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.

Halaman ini dilengkapi editor yang bisa dijalankan. Edit, jalankan, dan lihat output-nya seketika.

Inilah pertanyaan PHP yang paling sering muncul di interview, dengan jawaban singkat yang benar untuk PHP 8.3 dan kode di tempat yang memang butuh kode. Tebak output setiap blok sebelum kamu menekan Jalankan: itulah yang diuji pewawancara.

Pertanyaan interview PHP untuk pemula

Apa itu PHP dan bagaimana cara kerjanya?

PHP adalah bahasa scripting sisi server. Web server (Nginx atau Apache) meneruskan request ke PHP (biasanya PHP-FPM), PHP menjalankan script dari atas, dan apa pun yang dicetaknya menjadi response, biasanya berupa HTML. Setiap request dimulai dari awal: variabel tidak bertahan antar-request kecuali kamu menyimpannya di session, database, atau cache. PHP juga bisa menjalankan script di command line (php script.php).

Apa perbedaan == dan ===?

== membandingkan setelah type juggling, === membandingkan nilai dan tipe tanpa konversi. Pemanasan di atas menunjukkan cara kerja ==: string numerik dibandingkan sebagai angka, jadi '10' == '1e1' bernilai true. Sejak PHP 8, angka yang dibandingkan dengan string non-numerik dibandingkan sebagai string, jadi 0 == 'a' bernilai false (di PHP 7 nilainya true). Ketuk sel-selnya untuk membandingkan kedua operator:

Perbandingan loose (==) dan strict (===)
Point at or tap a cell to read it as PHP.
$a == $btruefalse01"0""1"""null[]"a""10""1e1"
true
false
0
1
"0"
"1"
""
null
[]
"a"
"10"
"1e1"
Every cell computed by PHP 8.3.19.

Pakai === secara default. in_array() dan array_search() memakai == kecuali kamu memberikan true sebagai argumen ketiga.

Apa perbedaan echo dan print?

Keduanya menampilkan string. echo menerima beberapa argumen (echo $a, $b;) dan tidak mengembalikan apa pun; print menerima satu argumen dan mengembalikan 1, jadi bisa dipakai di dalam ekspresi. Keduanya bukan fungsi, jadi tanda kurung bersifat opsional. Dalam praktiknya semua orang memakai echo.

Tanda kutip tunggal vs tanda kutip ganda?

String dengan tanda kutip ganda menginterpolasi variabel dan escape sequence: "Hi $name\n". String dengan tanda kutip tunggal bersifat literal kecuali untuk \' dan \\: 'Hi $name\n' mencetak karakter-karakter itu apa adanya. Perbedaan kecepatannya bisa diabaikan, jadi pilihannya soal keterbacaan: tanda kutip ganda saat kamu melakukan interpolasi, tanda kutip tunggal saat tidak.

Apa saja tipe data di PHP?

Empat tipe skalar (int, float, string, bool), dua tipe gabungan (array dan object), dan dua tipe khusus (null dan resource). callable, iterable, mixed, dan void hanya ada sebagai deklarasi tipe, tidak pernah sebagai tipe sebuah nilai. gettype() dan get_debug_type() memberi tahu tipe sebuah nilai saat runtime, dan var_dump() mencetaknya bersama nilainya.

Apa perbedaan isset, empty, dan is_null?

isset($x) bernilai true saat variabelnya ada dan tidak bernilai null. empty($x) bernilai true saat variabelnya tidak ada atau bernilai falsy (0, '0', '', [], false, null). is_null($x) bernilai true untuk null, tetapi memberi warning pada variabel yang tidak terdefinisi. isset dan empty tidak pernah memberi warning, itulah sebabnya keduanya dipakai pada key array.

isset, empty, dan is_null untuk setiap nilai $x
Point at or tap a cell to read it as PHP.
$xissetemptyis_null
null
false
0
"0"
""
" "
[]
"a"
0.0
Every cell computed by PHP 8.3.19.

Baris yang sering salah dijawab adalah "0": string nol dianggap kosong, sedangkan " " (sebuah spasi) tidak. Halaman isset berisi tabel lengkapnya.

Apa perbedaan include dan require?

Keduanya menyisipkan dan menjalankan file lain. Jika file-nya tidak ada, include mengeluarkan warning dan script lanjut, sedangkan require melempar Error ("Failed opening required"), yang menghentikan script kecuali ada yang menangkapnya. Varian _once (include_once, require_once) melewati file yang sudah dimuat, sehingga mencegah error "cannot redeclare function". Pakai require (atau require_once) untuk file yang dibutuhkan script agar bisa berjalan, yang hampir selalu berarti semuanya; autoloader Composer membuat sebagian besar include manual tidak diperlukan.

Apa perbedaan GET dan POST?

GET mengirim data di query string URL ($_GET), jadi terlihat, bisa di-bookmark, dan panjangnya terbatas; pakai untuk membaca data, seperti pencarian dan paginasi. POST mengirim data di body request ($_POST); pakai untuk apa pun yang mengubah state, seperti login, menyimpan, atau pembayaran. Request GET tidak boleh mengubah data, karena link bisa di-prefetch dan di-crawl.

Apa itu operator null coalescing?

$a ?? $b mengembalikan $a jika ada dan tidak bernilai null, jika tidak $b, tanpa warning untuk variabel atau key yang tidak terdefinisi: $page = $_GET['page'] ?? 1;. ??= hanya mengisi nilai saat sisi kiri bernilai null atau tidak ada. Operator ini berbeda dari ?:, yang memakai nilai cadangan untuk nilai falsy apa pun, jadi 0 ?: 5 menghasilkan 5 tetapi 0 ?? 5 menghasilkan 0.

Pertanyaan interview PHP tingkat menengah

Apa yang terjadi saat melakukan perulangan lewat referensi di foreach?

foreach ($arr as &$v) memungkinkanmu mengubah elemen di tempatnya, tetapi $v tetap menjadi referensi ke elemen terakhir setelah loop selesai. Memakai lagi nama itu di loop kedua akan menimpa elemen tersebut:

Elemen terakhirnya 20, bukan 30: selama loop kedua, $v (yang masih $arr[2]) diisi 10, lalu 20, lalu dirinya sendiri. Hapus // sebelum unset($v) lalu jalankan lagi. Halaman foreach membahas referensi secara detail.

Apa perbedaan abstract class dan interface? Lalu apa itu trait?

Interface adalah kontrak: signature method (dan konstanta) tanpa implementasi, dan sebuah class bisa mengimplementasikan banyak interface. Abstract class bisa berisi property, constructor, dan method yang sudah jadi, ditambah method abstract yang wajib ditulis oleh turunannya; sebuah class hanya bisa meng-extend satu. Trait adalah sekumpulan method yang disalin ke dalam class dengan use, untuk memakai ulang kode di antara class yang tidak punya parent yang sama.

Jawaban singkat yang disukai pewawancara: pakai interface untuk menyatakan apa yang bisa dilakukan sesuatu, abstract class untuk berbagi cara melakukannya, dan trait saat class-class yang tidak berhubungan butuh beberapa method yang sama.

Apa perbedaan self dan static?

self merujuk ke class tempat kode itu ditulis. static merujuk ke class yang benar-benar dipanggil saat runtime, yang disebut late static binding. Ini penting di method parent yang membuat atau menjelaskan "jenis object ini":

User::createStatic() membuat User. User::createSelf() membuat Model, yang melanggar tipe return static, sehingga PHP melempar TypeError. Itulah sebabnya factory method memakai new static().

Apa itu magic method?

Method yang dipanggil PHP untukmu, semuanya diawali dua underscore. Yang umum: __construct() saat object dibuat, __destruct() saat object dihancurkan, __toString() saat object dipakai sebagai string, __get() dan __set() untuk property yang tidak bisa diakses, __call() dan __callStatic() untuk method yang tidak ada, __invoke() saat object dipanggil seperti fungsi, dan __clone() setelah clone.

Apa perbedaan array_merge() dan operator +?

array_merge() menambahkan di belakang: key numerik diberi nomor ulang dan key string yang belakangan menimpa yang sebelumnya. + adalah union: operator ini mempertahankan array kiri dan hanya menambahkan key yang belum ada, jadi untuk key yang sama, nilai pertama yang menang.

+ adalah alat yang tepat untuk nilai default: $options + ['timeout' => 30] mempertahankan apa yang diberikan pemanggil dan mengisi sisanya.

Apa fungsi declare(strict_types=1)?

Tanpanya, PHP mengonversi argumen skalar ke tipe parameter yang dideklarasikan jika bisa: memberikan "5" ke parameter int menghasilkan 5. Dengan declare(strict_types=1); sebagai pernyataan pertama sebuah file, pemanggilan dari file itu wajib memberikan tipe yang persis, kalau tidak TypeError dilempar (int yang diberikan ke parameter float adalah satu-satunya pelebaran yang diizinkan).

Hapus baris declare lalu jalankan lagi: pemanggilan kedua mengembalikan 10 alih-alih melempar error.

Cookie disimpan di browser dan dikirim bersama setiap request, jadi pengunjung bisa membaca dan mengubahnya. Session menyimpan data di server dan hanya menyimpan id acak di dalam cookie (PHPSESSID). Taruh apa pun yang harus bisa dipercaya, seperti id user yang sedang login, di $_SESSION; setelah login, panggil session_regenerate_id(true). Halaman session dan cookie berisi kodenya.

Bagaimana cara mencegah SQL injection?

Jangan pernah menyusun SQL dengan menyambung input. Pakai prepared statement, agar nilai dikirim terpisah dari query:

<?php
$stmt = $pdo->prepare('SELECT * FROM users WHERE email = ?');
$stmt->execute([$email]);
$user = $stmt->fetch();

Placeholder hanya berlaku untuk nilai. Nama tabel, nama kolom, dan ASC/DESC harus diperiksa terhadap allowlist sebelum dimasukkan ke SQL. Lihat PDO.

Bagaimana cara mencegah XSS?

Escape output, bukan input: bungkus setiap nilai yang dicetak ke HTML dengan htmlspecialchars($value, ENT_QUOTES, 'UTF-8'), atau pakai template engine yang melakukannya secara otomatis (Twig, Blade). Di dalam <script>, pakai json_encode() dengan JSON_HEX_TAG. Tambahkan header Content-Security-Policy sebagai lapisan kedua.

Bagaimana password sebaiknya disimpan?

Dengan password_hash($password, PASSWORD_DEFAULT) dan diperiksa dengan password_verify($password, $hash). Keduanya memakai bcrypt (atau Argon2id) dengan salt acak yang disimpan di dalam hash dan cost yang sengaja dibuat berat. md5() dan sha1() salah untuk password karena cepat dan tanpa salt. Pakai password_needs_rehash() saat login untuk memperbarui hash lama.

Pertanyaan interview PHP tingkat lanjut

Apa itu generator dan kapan kamu memakainya?

Fungsi yang berisi yield mengembalikan Generator yang menghasilkan nilai satu per satu, hanya saat diminta. Generator memungkinkanmu menelusuri deret yang besar atau tanpa akhir tanpa membuat array di memori:

Pemakaian umumnya adalah membaca file besar baris per baris, streaming baris database, dan pipeline lazy. Generator juga mendukung key (yield $key => $value), delegasi (yield from), dan menerima nilai dengan send().

Apa itu closure, dan apa fungsi use?

Anonymous function (function () { ... }) adalah object Closure. Fungsi ini tidak melihat variabel dari luar kecuali kamu mencantumkannya di use, yang menyalin nilainya pada saat closure dibuat; use (&$x) menangkap lewat referensi. Arrow function (fn ($x) => $x * $factor) menangkap variabel dari luar secara otomatis, berdasarkan nilai, dan hanya berisi satu ekspresi.

Apa perbedaan abstract, final, dan readonly?

abstract menandai class yang tidak bisa diinstansiasi, atau method yang wajib diimplementasikan oleh turunannya. final melarang override sebuah method atau extend sebuah class. readonly (PHP 8.1) membuat property hanya bisa ditulis sekali, dari dalam class, biasanya di constructor; PHP 8.2 menambahkan class readonly, yang semua property-nya readonly.

Apa itu Composer, dan apa itu PSR-4?

Composer adalah dependency manager PHP: composer.json mendaftar paketnya, composer.lock mengunci versi yang persis, dan vendor/autoload.php memuat semuanya. PSR-4 adalah standar autoloading yang memetakan prefix namespace ke sebuah folder, jadi App\Mail\Mailer berada di src/Mail/Mailer.php dan dimuat saat pertama kali dipakai. Jelaskan perbedaan install (dari file lock) dan update (versi baru, file lock baru).

Apa yang berubah di PHP 8?

Fitur-fitur utamanya: di 8.0, named argument, match, operator nullsafe ?->, union type, constructor property promotion, attribute, str_contains(), dan perbandingan string dengan angka yang lebih masuk akal; di 8.1, enum, readonly property, sintaks first-class callable (strlen(...)), dan fiber; di 8.2, class readonly dan tipe null/true/false yang berdiri sendiri; di 8.3, konstanta class bertipe, attribute #[\Override], dan json_validate(); di 8.4, property hooks, asymmetric visibility (public private(set)), array_find(), dan new Foo()->method() tanpa tanda kurung pembungkus. Banyak fungsi juga kini melempar TypeError atau ValueError alih-alih mengembalikan false dengan warning.

Bagaimana PHP mengelola memori?

Setiap nilai punya reference count; saat angkanya turun menjadi nol, memorinya langsung dibebaskan. Object yang saling mereferensikan dalam sebuah siklus tidak pernah mencapai nol, jadi cycle collector berjalan setiap kali buffer kandidat akar siklusnya penuh (10.000 entri secara default) dan membebaskannya (gc_collect_cycles() menjalankannya kapan saja diminta). Array dan string bersifat copy-on-write: $b = $a berbagi data yang sama sampai salah satunya diubah. Karena setiap request dimulai dan diakhiri dengan bersih, kebocoran memori terutama penting di worker yang berjalan lama dan consumer antrean.

Bagaimana array PHP diimplementasikan?

Array PHP adalah hash map yang berurutan: array mempertahankan urutan penyisipan dan memetakan key int atau string ke nilai, itulah sebabnya tipe yang sama bisa berperan sebagai list, dictionary, dan stack. Pencarian key (isset($arr[$key])) rata-rata butuh waktu konstan, sedangkan in_array() memindai setiap nilai. Key string yang mirip integer dikonversi: $a['1'] dan $a[1] adalah elemen yang sama.

Tugas coding interview yang umum

Latihan singkat yang sering diminta secara langsung. Setiap fungsi adalah salah satu jawaban yang umum; jalankan, tambahkan input-mu sendiri (termasuk input kosong), dan bersiaplah menjelaskan kompleksitas waktunya, yang biasanya justru diperiksa oleh pewawancara.

Pertanyaan yang sering diajukan

Bagaimana cara mempersiapkan diri untuk interview PHP developer?

Pastikan kamu bisa menjelaskan dan menulis kode untuk dasar-dasarnya tanpa mencari referensi: perbandingan dan tipe data, array beserta fungsinya, OOP (interface, abstract class, trait, static), exception, dan keamanan (prepared statement, htmlspecialchars, password_hash). Lalu kuasai satu framework (Laravel atau Symfony) dan Composer dengan cukup baik untuk menceritakan proyek yang pernah kamu buat.

Versi PHP mana yang perlu saya kuasai untuk interview?

PHP 8. Pewawancara berharap kamu tahu fitur-fitur yang ditambahkan di 8.0 sampai 8.3: named argument, match, operator nullsafe ?->, union type, constructor property promotion, enum, readonly property, dan sintaks first-class callable. Sebut perilaku PHP 7 hanya jika memang berubah, seperti 0 == "a".

Pertanyaan PHP apa yang diajukan untuk fresh graduate?

Kebanyakan dasar-dasar bahasa: == vs ===, echo vs print, tanda kutip tunggal vs ganda, isset vs empty, include vs require, GET vs POST, session vs cookie, dan tugas array sederhana seperti membalik, menyaring, atau menghitung nilai. Bersiaplah untuk setidaknya satu latihan coding singkat.

Pertanyaan PHP apa yang diajukan untuk developer berpengalaman?

Desain dan cara kerja di balik layar: interface vs abstract class, trait, late static binding, referensi, generator dan memori, exception dan penanganan error, SQL injection dan transaksi, caching, autoloading Composer, serta bagaimana kamu menyusun atau menguji sebuah fitur. Jawabanmu diharapkan menyertakan pertimbangan untung ruginya, bukan sekadar definisi.

Ilustrasi bahasa pemrograman di Coddy

Belajar coding dengan Coddy

Mulai