Rumah > pembangunan bahagian belakang > tutorial php > Cara PHP Mengendalikan Ralat dan Pengendalian Pengecualian: Panduan Komprehensif

Cara PHP Mengendalikan Ralat dan Pengendalian Pengecualian: Panduan Komprehensif

Susan Sarandon
Lepaskan: 2024-12-28 17:14:09
asal
538 orang telah melayarinya

How PHP Handles Error and Exception Handling: A Comprehensive Guide

Bagaimanakah PHP Mengendalikan Ralat dan Pengendalian Pengecualian?

Dalam PHP, pengendalian ralat dan pengecualian adalah penting untuk mengekalkan aplikasi yang mantap dan selamat. Pengendalian ralat dan pengecualian yang betul memastikan aplikasi anda berkelakuan boleh diramal, memberikan maklum balas yang bermakna kepada pengguna dan merekodkan isu untuk penyahpepijatan dan penambahbaikan pada masa hadapan. Dalam artikel ini, kita akan membincangkan perbezaan antara ralat dan pengecualian dalam PHP, cara PHP mengendalikannya dan amalan terbaik untuk pengendalian ralat dan pengecualian.


1. Ralat Pengendalian dalam PHP

Ralat dalam PHP merujuk kepada situasi yang berlaku semasa pelaksanaan program yang membawa kepada tingkah laku yang tidak dijangka, selalunya mengakibatkan penamatan skrip. PHP menawarkan beberapa mekanisme terbina dalam untuk mengendalikan dan bertindak balas terhadap ralat.

Jenis Ralat:

PHP mempunyai pelbagai jenis ralat yang boleh berlaku:

  • Ralat Parse (Ralat Sintaks): Berlaku apabila PHP menghadapi masalah semasa menghuraikan skrip anda (cth., tiada koma bertitik, kurungan tidak sepadan).
  • Ralat Maut: Ralat ini berlaku apabila PHP menemui sesuatu yang tidak dapat dipulihkan, seperti panggilan fungsi kepada kaedah yang tidak wujud atau termasuk fail yang tidak wujud.
  • Ralat Amaran: Amaran tidak menghalang skrip daripada dijalankan. Ia menunjukkan masalah yang PHP boleh pulih, seperti memasukkan fail yang tidak wujud.
  • Ralat Notis: Notis adalah kurang teruk daripada amaran. Ia menunjukkan isu yang berpotensi seperti pembolehubah tidak ditentukan tetapi tidak menghalang skrip daripada berjalan.

Tahap Pelaporan Ralat:

PHP membolehkan anda mengawal jenis ralat yang harus dilaporkan menggunakan fungsi error_reporting() atau dengan menetapkan arahan error_reporting dalam fail php.ini.

// Report all errors except E_NOTICE
error_reporting(E_ALL & ~E_NOTICE);

// Report all errors, including notices
error_reporting(E_ALL);

// Suppress all errors
error_reporting(0);
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Tahap pelaporan ralat yang paling biasa ialah:

  • E_ERROR: Ralat masa jalan yang membawa maut.
  • E_AMARAN: Ralat masa jalan yang tidak membawa maut.
  • E_NOTIS: Notis masa larian.
  • E_ALL: Semua ralat, amaran dan notis.

Mengendalikan Ralat:

Anda boleh menangani ralat menggunakan fungsi PHP terbina dalam:

  • set_error_handler(): Mentakrifkan pengendali ralat tersuai yang akan dipanggil apabila ralat PHP berlaku.

Contoh:

// Custom error handler function
function customError($errno, $errstr) {
    echo "Error [$errno]: $errstr";
}

// Set custom error handler
set_error_handler("customError", E_WARNING);

// Trigger a warning error
echo $undefined_variable;  // This will call the custom error handler
Salin selepas log masuk
Salin selepas log masuk
  • trigger_error(): Digunakan untuk mencetuskan ralat tersuai secara manual.

Contoh:

// Report all errors except E_NOTICE
error_reporting(E_ALL & ~E_NOTICE);

// Report all errors, including notices
error_reporting(E_ALL);

// Suppress all errors
error_reporting(0);
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

2. Pengendalian Pengecualian dalam PHP

pengecualian ialah mekanisme yang membolehkan anda mengendalikan ralat masa jalan dengan lebih anggun. Tidak seperti ralat tradisional, pengecualian membolehkan anda menangkap ralat dan mengendalikannya dengan cara terkawal.

Melemparkan Pengecualian:

Anda boleh membuang pengecualian dalam PHP menggunakan kata kunci lontaran. Apabila pengecualian dilemparkan, aliran biasa atur cara terganggu dan kawalan dihantar ke blok tangkapan terdekat yang boleh mengendalikan pengecualian.

// Custom error handler function
function customError($errno, $errstr) {
    echo "Error [$errno]: $errstr";
}

// Set custom error handler
set_error_handler("customError", E_WARNING);

// Trigger a warning error
echo $undefined_variable;  // This will call the custom error handler
Salin selepas log masuk
Salin selepas log masuk

Menangkap Pengecualian:

Untuk menangkap pengecualian, anda menggunakan blok cuba-tangkap. Blok cuba mengandungi kod yang mungkin membuang pengecualian, manakala blok tangkapan mengandungi kod yang mengendalikan pengecualian.

// Trigger a custom user error
trigger_error("This is a custom error!", E_USER_NOTICE);
Salin selepas log masuk

Objek Pengecualian:

Apabila pengecualian ditangkap, objek kelas pengecualian dihantar ke blok tangkapan. Objek ini mengandungi maklumat berguna tentang pengecualian, seperti:

  • getMessage(): Mengembalikan mesej ralat.
  • getCode(): Mengembalikan kod pengecualian (jika disediakan).
  • getFile(): Mengembalikan fail tempat pengecualian dibuang.
  • getLine(): Mengembalikan nombor baris tempat pengecualian dilemparkan.
  • getTrace(): Mengembalikan surih tindanan pengecualian.

Kelas Pengecualian Tersuai:

Anda boleh menentukan kelas pengecualian tersuai dengan melanjutkan kelas Pengecualian terbina dalam PHP. Ini membolehkan anda membuat jenis pengecualian yang lebih khusus yang boleh ditangkap dan dikendalikan secara berbeza.

// Throwing an exception
throw new Exception("Something went wrong!");
Salin selepas log masuk

3. Pengecualian Tidak Ditangkap

Jika pengecualian dilemparkan tetapi tidak ditangkap oleh mana-mana blok tangkapan, PHP akan menghasilkan ralat maut dan memaparkan mesej yang menunjukkan bahawa pengecualian itu tidak ditangkap. Untuk mengelakkan perkara ini, sentiasa pastikan kod anda mengandungi blok try-catch yang betul untuk pengecualian yang mungkin dilemparkan.


4. Ralat dan Amalan Terbaik Pengendalian Pengecualian

a. Gunakan Try-Catch untuk Pengecualian:

  • Gunakan pengecualian untuk mengendalikan ralat masa jalan dan keadaan luar biasa, terutamanya dalam senario seperti ralat pangkalan data, ralat pengendalian fail dan isu rangkaian.
  • Gunakan blok cuba-tangkap untuk menangkap pengecualian dan mengendalikannya dengan anggun (cth., log pengecualian, tunjukkan mesej mesra pengguna atau cuba pemulihan).

b. Tangani Pelbagai Jenis Ralat Secara Berasingan:

  • Untuk isu yang dijangka dan tidak kritikal (seperti fail yang hilang atau pembolehubah tidak wujud), gunakan pengendalian ralat dengan set_error_handler().
  • Untuk isu kritikal yang sepatutnya menamatkan skrip atau memerlukan pengendalian khas (cth., kegagalan sambungan pangkalan data), gunakan pengecualian.

c. Ralat dan Pengecualian Log:

  • Sentiasa log ralat dan pengecualian kepada fail log ralat untuk tujuan penyahpepijatan. Ini amat penting untuk persekitaran pengeluaran, di mana anda mungkin tidak mahu menunjukkan ralat terperinci kepada pengguna akhir.

Contoh ralat log masuk php.ini:

// Report all errors except E_NOTICE
error_reporting(E_ALL & ~E_NOTICE);

// Report all errors, including notices
error_reporting(E_ALL);

// Suppress all errors
error_reporting(0);
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

d. Paparkan Mesej Ralat Mesra kepada Pengguna:

  • Dalam pengeluaran, anda harus mengelak daripada menunjukkan mesej ralat mentah kepada pengguna. Sebaliknya, paparkan mesej ralat generik dan log butiran untuk pembangun.

e. Gunakan Logik Pengendalian Pengecualian Tersuai:

  • Buat kelas pengecualian tersuai yang menyediakan konteks atau gelagat tambahan, seperti cuba semula logik untuk isu sementara (cth., kegagalan sambungan pangkalan data).

5. Ralat PHP dan Aliran Pengendalian Pengecualian

  1. Ralat:

    • PHP menyemak ralat berdasarkan tahap pelaporan ralat.
    • Jika ralat berlaku (seperti amaran atau notis), ia mencetuskan pengendali ralat jika ditetapkan menggunakan set_error_handler().
    • Ralat maut atau ralat penghuraian menghentikan pelaksanaan skrip.
  2. Pengecualian:

    • Jika pengecualian dilemparkan dalam blok percubaan, PHP segera memindahkan kawalan ke blok tangkapan yang sepadan.
    • Jika tiada blok tangkapan yang sepadan wujud, pengecualian tidak dapat ditangkap dan ralat maut akan dicetuskan.

Kesimpulan

Dalam PHP, kedua-dua pengendalian ralat dan exception adalah penting untuk memastikan aplikasi anda mengendalikan situasi yang tidak dijangka dengan baik. Ralat biasanya digunakan untuk isu segera seperti ralat sintaks dan amaran, manakala pengecualian menyediakan cara yang lebih mantap dan fleksibel untuk menangani masalah masa jalan. Dengan memahami perbezaan dan menggunakan pendekatan yang betul dalam konteks yang betul, anda boleh mencipta aplikasi PHP yang lebih dipercayai dan boleh diselenggara.


Atas ialah kandungan terperinci Cara PHP Mengendalikan Ralat dan Pengendalian Pengecualian: Panduan Komprehensif. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan