Sekecil apa pun program yang kita tulis, kegagalan pasti pernah muncul: variabel yang lupa diberi nilai, nama function yang salah ketik, atau berkas yang ternyata tidak ada. PHP melaporkan kegagalan semacam itu melalui pesan error yang tampil di layar, dan pesan tersebut sering terlihat menakutkan bagi pemula. Padahal, pesan error adalah teman terbaik kita: pesan error menyimpan petunjuk persis tentang apa yang salah dan di lokasi mana kejadian berlangsung. Pada chapter ini kita belajar membaca anatomi pesan error, membedakan kegagalan yang masih bisa dilanjutkan dari yang menghentikan program, lalu memetakan dua mekanisme pelaporan kegagalan yang dimiliki PHP.
Apa Itu Error PHP #
Error adalah sinyal kegagalan yang dipicu oleh Zend Engine — mesin yang menjalankan kode PHP — ketika eksekusi menemui kondisi yang tidak bisa diproses. Contoh pemicunya antara lain membaca variabel yang belum pernah dibuat, memanggil function yang tidak terdefinisi, atau menulis sintaks yang tidak dipahami parser. Karena sinyal ini lahir di level engine, error berbeda dari kesalahan logika bisnis; jika kode kita menghitung diskon dengan rumus yang keliru tanpa melanggar aturan bahasa PHP, engine tidak akan mengeluarkan error apa pun.
PHP memiliki dua mekanisme pelaporan kegagalan. Mekanisme pertama adalah error — cara tertua yang berbasis level dan pesan teks, misalnya Warning dan Fatal error, yang menjadi fokus chapter ini. Mekanisme kedua adalah exception — kegagalan berbentuk object yang dilempar dengan keyword throw dan ditangani dengan try-catch; kita bahas tuntas mulai chapter Exceptions
. Keduanya saling melengkapi, dan programmer PHP modern perlu menguasai keduanya.
Anatomi Pesan Error #
Setiap pesan error PHP memiliki anatomi yang konsisten dengan empat bagian: label jenis error, pesan deskriptif, nama berkas, dan nomor baris. Mari kita lihat anatomi tersebut pada contoh nyata berikut:
<?php
$nama = "Budi";
echo "Halo, $nama\n";
echo "Halo, $pengunjung\n";
echo "Baris ini tetap tereksekusi\n";Output yang Dihasilkan:
Halo, Budi
Warning: Undefined variable $pengunjung in /home/z/my-project/php-course/content/php/error-handling/memahami-php-errors/.verify_tmp.php on line 4
Halo,
Baris ini tetap tereksekusiMari kita telaah apa yang terjadi pada baris-baris kode di atas:
- Baris 3 (
echo "Halo, $nama\n";): variabel$namasudah diberi nilai pada baris 2, sehinggaechomencetakHalo, Budidengan normal. - Baris 4 (
echo "Halo, $pengunjung\n";): variabel$pengunjungtidak pernah dibuat, sehingga engine memancarkanWarning: Undefined variable $pengunjung. Pesan tersebut memuat keempat bagian anatomi: jenis (Warning), deskripsi (Undefined variable $pengunjung), berkas tempat kejadian, dan nomor baris. - Baris 5: masih tereksekusi dan mencetak teksnya — bukti bahwa
Warningtidak menghentikan program.
PHP juga menyimpan catatan error terakhir di memori. Function error_get_last() mengembalikan array berisi informasi error yang paling baru terjadi, sehingga kita bisa memeriksa error secara terprogram dan tidak sekadar membacanya di layar:
<?php
echo "Nilai konstanta E_WARNING: " . E_WARNING . "\n";
echo "Halo, $tamu\n";
$detail = error_get_last();
print_r($detail);Output yang Dihasilkan:
Nilai konstanta E_WARNING: 2
Warning: Undefined variable $tamu in /home/z/my-project/php-course/content/php/error-handling/memahami-php-errors/.verify_tmp.php on line 3
Halo,
Array
(
[type] => 2
[message] => Undefined variable $tamu
[file] => /home/z/my-project/php-course/content/php/error-handling/memahami-php-errors/.verify_tmp.php
[line] => 3
)Mari kita bedah contoh kedua di atas:
- Baris 2: konstanta
E_WARNINGbernilai2— setiap level error memiliki konstanta representatifnya sendiri, materi chapter berikutnya. - Baris 3: variabel
$tamutidak terdefinisi sehingga munculWarningyang mencatat baris 3 sebagai lokasi kejadian. - Baris 5-6:
error_get_last()mengembalikan array dengan empat kunci yang persis memetakan anatomi pesan:type(angka level,2untukE_WARNING),message,file, danline.
Warning Melanjutkan Eksekusi, Fatal Error Menghentikan #
Dampak error terhadap program terbagi dua macam. Warning bersifat non-fatal: program diberi tahu bahwa ada masalah, lalu eksekusi dilanjutkan dengan nilai pengganti — variabel tak terdefinisi dibaca sebagai null. Fatal error bekerja sebaliknya: engine menghentikan eksekusi tepat di titik kejadian, baris-baris setelahnya tidak pernah dijalankan, dan proses PHP keluar dengan exit code 255. Perhatikan contoh fatal berikut:
<?php
echo "Sebelum pemanggilan fungsi\n";
$total = hitungTotalBelanja(150000);
echo "Baris ini tidak pernah tereksekusi\n";Output yang Dihasilkan:
Sebelum pemanggilan fungsi
Fatal error: Uncaught Error: Call to undefined function hitungTotalBelanja() in /home/z/my-project/php-course/content/php/error-handling/memahami-php-errors/.verify_tmp.php:3
Stack trace:
#0 {main}
thrown in /home/z/my-project/php-course/content/php/error-handling/memahami-php-errors/.verify_tmp.php on line 3Mari kita telaah kejadian pada contoh di atas:
- Baris 2: teks
Sebelum pemanggilan fungsitercetak normal. - Baris 3: nama
hitungTotalBelanja()tidak dikenal engine, sehingga munculFatal error: Uncaught Error: Call to undefined function hitungTotalBelanja()lengkap dengan berkas dan baris kejadian. - Baris 4: tidak pernah tereksekusi karena eksekusi sudah berhenti; proses PHP keluar dengan exit code 255, bukan 0.
Perbandingan ringkas kedua karakteristik tersebut dapat dilihat pada tabel berikut:
| Karakteristik | Warning | Fatal error |
|---|---|---|
| Eksekusi setelah kejadian | berlanjut | berhenti total |
| Exit code proses | 0 | 255 |
| Contoh pemicu | variabel atau array key tidak terdefinisi | function atau konstanta tidak ada, membagi dengan nol |
| Penanganan utama | perbaiki kode hingga Warning hilang | perbaiki kode; dapat pula ditangkap catch (Error) |
Kata Uncaught Error pada pesan fatal di atas bukan kebetulan: sejak PHP 7, mayoritas fatal error berwujud object bertipe Error yang — sama seperti exception — dapat ditangkap oleh blok catch. Mekanisme penangkapan ini kita latih tuntas pada chapter try-catch-finally
.
Error dan Exception sebagai Dua Mekanisme Pelaporan #
Sebelum melangkah lebih jauh, mari kita petakan perbedaan kedua mekanisme kegagalan PHP agar arah pembelajaran kita jelas:
| Aspek | Error | Exception |
|---|---|---|
| Sumber kegagalan | engine PHP, dipicu otomatis | kode aplikasi, dilempar eksplisit dengan throw |
| Representasi | pesan teks dengan level tertentu | object dari class turunan Exception |
| Cara mengatur | error_reporting() dan konfigurasi php.ini | ditangkap try-catch, atau dibiarkan menjadi fatal |
| Contoh kejadian | Undefined variable, Call to undefined function | Saldo tidak cukup, Email tidak valid |
Kedua mekanisme tersebut tidak saling menggantikan. Error menjaga kesehatan bahasa — kecocokan sintaks, keberadaan variabel, dan ketersediaan function — sedangkan exception mengekspresikan aturan bisnis yang dilanggar, misalnya saldo yang kurang atau input yang tidak valid. Section ini membahas keduanya secara berurutan, dimulai dari sisi error.
Berkas contoh.php pada bagian bawah halaman merangkum seluruh contoh non-fatal di atas dalam satu program utuh yang dapat Anda unduh dan jalankan langsung dengan php contoh.php.
Ringkasan #
Error adalah sinyal kegagalan level engine dengan anatomi pesan yang tetap: jenis, pesan deskriptif, berkas, dan baris. Warning memperingatkan tanpa menghentikan eksekusi, sementara fatal error menghentikan program total dengan exit code 255. Di samping error, PHP menyediakan exception sebagai mekanisme kegagalan berbasis object untuk aturan bisnis. Setiap error membawa label level seperti E_WARNING dan E_ERROR; peta level inilah yang kita pelajari pada chapter berikutnya.
Referensi #
Berkas Sumber
Berkas pendukung halaman ini dapat diunduh dan dijalankan langsung sesuai penjelasan di atas.
contoh.php
Unduh berkas<?php
// contoh.php — rangkuman contoh chapter "Memahami PHP Errors".
// Jalankan dengan: php contoh.php
$nama = "Budi";
echo "Halo, $nama\n";
echo "Halo, $pengunjung\n";
echo "Baris ini tetap tereksekusi\n";
echo "\n";
echo "Nilai konstanta E_WARNING: " . E_WARNING . "\n";
echo "Halo, $tamu\n";
$detail = error_get_last();
print_r($detail);