Program yang gagal adalah bagian normal dari menulis kode — yang membedakan pemula dan yang berpengalaman bukan jumlah kegagalannya, melainkan kecepatannya membaca laporan kegagalan itu. Pesan error PHP sebenarnya laporan yang ramah: PHP menyebutkan jenis masalah, berkas, sampai nomor barisnya. Pada Chapter penutup section ini kita belajar membaca laporan tersebut: format pesannya, perbedaan parse error dan fatal error, serta warning yang tidak menghentikan program. Mekanisme lengkap mengatur dan menangkap error akan dibahas tuntas pada Section Error Handling — sekarang kita fokus pada keterampilan membaca.

Anatomi Pesan Error #

Mari mulai dari kesalahan paling klasik: lupa menutup statement dengan titik koma. Simpan kode berikut sebagai latihan.php, jalankan dengan php latihan.php, dan PHP menjawab dengan laporan berikut:

php
<?php
$nama = "Budi"
echo "Halo, $nama!";

Output yang Dihasilkan:

text

Parse error: syntax error, unexpected token "echo" in /home/z/my-project/php-course/content/php/menjalankan-program-php/memahami-php-errors/.verify_tmp.php on line 3

Pesan tersebut terdiri dari empat bagian yang selalu hadir dalam urutan sama:

BagianPada contoh di atasArti
TingkatParse errorKategori kesalahan
Pesansyntax error, unexpected token "echo"Apa yang ditemukan PHP
Berkasin latihan.phpBerkas tempat kesalahan ditemukan
Barison line 3Nomor baris dalam berkas tersebut

Dua kebiasaan membaca yang perlu dibentuk sejak awal. Pertama, baca dari tingkat kesalahannya — ia menentukan seberapa serius masalahnya dan apakah program masih berjalan (tabel lengkapnya menyusul pada bagian Tingkatan Error). Kedua, langsung buka berkas dan baris yang disebut; hampir selalu akar masalah berada tepat di situ atau beberapa baris di sekitarnya.

Ada pula satu jebakan klasik pada contoh kita: pesan menunjuk baris 3, padahal kesalahan sebenarnya ada di akhir baris 2 — titik koma setelah "Budi" yang lupa ditulis. Parser PHP baru tersandung ketika membaca token berikutnya (echo), dan itulah posisi yang dilaporkan. Pesan error selalu menunjuk lokasi masalah ditemukan, yang kadang berada sesaat setelah akar masalahnya — jadi bila baris yang ditunjuk terlihat benar, periksa baris di atasnya.

Sebagai catatan tampilan: ketika dijalankan dari CLI, pesan error PHP langsung muncul di output terminal, bercampur dengan output program — persis seperti contoh-contoh di chapter ini. Baris kosong yang mendahului setiap pesan adalah pemisah otomatis yang PHP sisipkan agar pesan tidak menempel pada output di sekitarnya. Saat error dicatat ke berkas log, barisnya justru diberi tambahan waktu dan awalan PHP (misalnya PHP Warning: ...); itulah sebabnya di berbagai artikel Anda kerap menjumpai bentuk PHP Fatal error: ....

Parse Error Terjadi Sebelum Program Berjalan #

PHP menjalankan berkas dalam dua tahap: membaca seluruh teks kode dan menerjemahkannya menjadi instruksi, baru kemudian mengeksekusi instruksi tersebut. Parse error adalah kegagalan pada tahap pertama — parser (penerjemah di dalam PHP yang membaca teks kode) menemukan urutan karakter yang tidak sesuai aturan bahasa. Akibatnya sangat tegas: tidak ada satu baris pun yang dieksekusi, sekalipun baris-baris sebelum lokasi kesalahan sudah tampak benar.

Perhatikan kembali contoh sebelumnya: string Halo, Budi! tidak pernah tercetak, dan satu-satunya output program adalah pesan errornya. Bandingkan dengan program yang sama setelah titik koma dilengkapi:

php
<?php
$nama = "Budi";
echo "Halo, $nama!";

Output yang Dihasilkan:

text
Halo, Budi!

Kedua program hanya berbeda satu karakter, tetapi hasilnya bertolak belakang: yang pertama mati sebelum mulai, yang kedua berjalan normal. Sebagai alat bantu, Chapter Memahami PHP CLI telah memperkenalkan php -l untuk memeriksa sintaks tanpa menjalankan berkas — dan seperti dicatat pada Chapter Menjalankan Script melalui CLI , parse error selalu melaporkan exit code 255 ke pemanggilnya.

Fatal Error di Tengah Eksekusi #

Kode bisa lolos tahap penerjemahan namun tetap gagal saat dijalankan — misalnya membagi sebuah angka dengan nol. Simpan berikut sebagai rata-rata.php lalu jalankan:

php
<?php
$totalPoin = 90;
$jumlahSiswa = 0;

echo "Menghitung rata-rata...\n";
echo $totalPoin / $jumlahSiswa;

Output yang Dihasilkan:

text
Menghitung rata-rata...

Fatal error: Uncaught DivisionByZeroError: Division by zero in /home/z/my-project/php-course/content/php/menjalankan-program-php/memahami-php-errors/.verify_tmp.php:6
Stack trace:
#0 {main}
  thrown in /home/z/my-project/php-course/content/php/menjalankan-program-php/memahami-php-errors/.verify_tmp.php on line 6

Bedah apa yang terjadi baris demi baris:

  1. Baris 2-3: dua variable diberi nilai; $jumlahSiswa sengaja diisi 0 agar contoh ini gagal.
  2. Baris 5: echo pertama tereksekusi — buktinya kalimat Menghitung rata-rata... benar-benar tercetak sebelum program mati.
  3. Baris 6: ekspresi $totalPoin / $jumlahSiswa menghitung 90 / 0; PHP menghentikan eksekusi di titik ini dan melaporkan Fatal error.

Pesan fatal error terasa lebih menakutkan karena lebih panjang, tetapi formatnya tetap teratur. Kata Uncaught berarti “tidak tertangkap”: PHP melempar (throw) masalah sebagai DivisionByZeroError, tidak ada kode yang menangkapnya, sehingga program dihentikan — mekanisme lempar-tangkap ini dibahas pada Section Error Handling. Bagian Stack trace: adalah jejak pemanggilan function saat masalah terjadi; pada script tunggal isinya hanya #0 {main}, artinya kesalahan terjadi di level teratas program. Baris thrown in ... on line 6 menutup laporan dengan menyebut ulang lokasi kejadian, dan exit code yang dilaporkan kembali 255.

Jenis fatal error lain yang paling sering menjumpai pemula adalah memanggil function yang tidak ada — misalnya karena salah ketik. Simpan berikut sebagai hitung.php:

php
<?php
echo "Memanggil function...\n";
hitungTotal(100, 200);

Output yang Dihasilkan:

text
Memanggil function...

Fatal error: Uncaught Error: Call to undefined function hitungTotal() in /home/z/my-project/php-course/content/php/menjalankan-program-php/memahami-php-errors/.verify_tmp.php:3
Stack trace:
#0 {main}
  thrown in /home/z/my-project/php-course/content/php/menjalankan-program-php/memahami-php-errors/.verify_tmp.php on line 3

Kabar baiknya, pesan seperti ini sangat jujur: PHP menyebut nama lengkap function yang dicari — hitungTotal() — beserta lokasi pemanggilannya. Perbaikannya tinggal meluruskan ejaan atau mendefinisikan function yang dimaksud; Anda akan berkenalan dengan function secara resmi pada Section Fungsi.

Warning Tidak Menghentikan Program #

Tingkat berikutnya adalah warning: laporan masalah nyata yang tidak menghentikan eksekusi. Contohnya membaca variable yang belum pernah diberi nilai — simpan berikut sebagai nilai.php lalu jalankan:

php
<?php
echo $nilai;
echo "Program tetap berjalan sampai akhir.\n";

Output yang Dihasilkan:

text

Warning: Undefined variable $nilai in /home/z/my-project/php-course/content/php/menjalankan-program-php/memahami-php-errors/.verify_tmp.php on line 2
Program tetap berjalan sampai akhir.

Urutan output di atas menceritakan kronologinya: saat baris 2 dieksekusi, PHP melaporkan Warning: Undefined variable $nilai, lalu echo mencetak string kosong di tempat variable itu; eksekusi kemudian berlanjut, dan baris 3 tetap berjalan sampai akhir. Program bahkan melaporkan exit code 0 seolah-olah sukses — padahal hasil kerjanya kemungkinan salah karena $nilai tidak berisi apa pun. Perilaku ini konsisten dengan peringatan pada Chapter Variabel : selalu beri nilai awal sebelum variable dibaca.

Tingkatan Error yang Perlu Dikenal #

Berikut ringkasan tingkatan yang telah kita temui, beserta efeknya terhadap program:

TingkatArtinyaEfek pada program
Parse errorTata bahasa berkas salahTidak ada baris yang dieksekusi; exit code 255
Fatal errorMasalah fatal di tengah eksekusiBerhenti tepat di titik kejadian; exit code 255
WarningMasalah nyata namun tidak fatalEksekusi berlanjut; exit code tetap 0
Deprecated / NoticeCatatan fitur usang atau gaya kurang baikEksekusi berlanjut tanpa hambatan

Tabel ini adalah peta ringkas, bukan keseluruhan wilayahnya. Pengaturan tingkat apa yang dilaporkan lewat error_reporting dan display_errors telah disinggung pada Chapter php.ini ; teknik menangkap error, mencatatnya ke log, dan mengubahnya menjadi laporan yang ramah pengguna adalah materi Section Error Handling yang ditunggu di pertengahan course.

Ringkasan #

Pesan error PHP selalu menyebut tingkat, deskripsi, berkas, dan nomor baris — baca keempatnya sebelum panik. Parse error berarti berkas gagal diterjemahkan sehingga tidak ada yang dieksekusi; fatal error menghentikan program di titik kejadian dengan exit code 255; warning dibiarkan lewat namun wajib diperbaiki. Dengan tiga jalur menjalankan program dan kemampuan membaca laporan kegagalannya, bekal Section Menjalankan Program PHP lengkap sudah. Section berikutnya mengajak kita menyelami bahasanya sendiri, dimulai dari aturan paling mendasar: variabel dan penamaannya.

Referensi #