Rumah >pembangunan bahagian belakang >tutorial php >Petua Pantas: Cara Mengendalikan Pengecualian di PHP
Setiap pengaturcara perlu menangani kesilapan dan situasi yang tidak dijangka setiap hari. Salah satu cara untuk melakukan itu adalah dengan menggunakan pengecualian. Dengan pengecualian, kita boleh menulis kod yang lebih kuat dan kurang terdedah kepada pepijat. Contoh kesilapan yang mungkin menyebabkan pengecualian termasuk cuba membuka fail yang tidak wujud pada sistem fail, atau cuba membahagikan nombor dengan sifar.
Apa pengecualian?
Kelas pengecualian dalam PHP adalah kelas asas untuk semua pengecualian dalam bahasa. Ia menyediakan kaedah untuk mendapatkan maklumat mengenai pengecualian, seperti fail dan nombor baris di mana ia berlaku, dan mesej yang menggambarkan ralat.
Apabila pengecualian dilemparkan, ia boleh ditangkap oleh blok kod dengan arahan yang betul untuk mengendalikannya. Sekiranya pengecualian tidak ditangkap, ia akan dikendalikan oleh pengendali pengecualian lalai, yang biasanya mengakibatkan kesilapan maut dan penamatan skrip.
Penggunaan Asas
<span>try { </span> <span>// code that may throw an exception </span> <span>$file = fopen('nonexistent.txt', 'r'); </span><span>} catch (Exception $e) { </span> <span>// code to handle the exception </span> <span>echo 'An error occurred: ' . $e->getMessage(); </span><span>} </span>
Dalam contoh ini, kod di dalam percubaan cuba cuba membuka fail yang tidak wujud. Ini melemparkan pengecualian, yang ditangkap oleh blok tangkapan. Blok tangkapan kemudian mencetak mesej ralat. Jika kita tidak menggunakan blok percubaan dalam contoh ini dan pengecualian dilemparkan, skrip akan ditamatkan dan mesej ralat akan dipaparkan. Ini akan mengakibatkan skrip tidak dapat meneruskan pelaksanaan. Menggunakan blok cubaan cuba membolehkan skrip mengendalikan pengecualian dengan anggun dan terus melaksanakan jika dikehendaki.
Untuk membuang pengecualian, kita boleh menggunakan kata kunci lemparan. Kata kunci lemparan digunakan di dalam blok cuba untuk membuang pengecualian apabila keadaan tertentu dipenuhi. Pengecualian boleh menjadi pengecualian jenis, atau kelas pengecualian tersuai yang kami buat. Berikut adalah contoh:
<span>function divide($a, $b) { </span> <span>if ($b == 0) { </span> <span>throw new Exception('Cannot divide by zero'); </span> <span>} </span> <span>return $a / $b; </span><span>} </span> <span>try { </span> <span>echo divide(5, 0); </span><span>} catch (Exception $e) { </span> <span>echo 'An error occurred: ' . $e->getMessage(); </span><span>} </span>
Dalam contoh ini, fungsi Divide dijangka mengambil dua parameter, $ A dan $ B, dan mengembalikan hasil membahagikan $ A sebanyak $ B. Walau bagaimanapun, jika parameter kedua adalah sifar, pengecualian dilemparkan.
Ia juga mungkin untuk membuat kelas pengecualian tersuai dengan memperluaskan kelas pengecualian terbina dalam. Mewujudkan kelas pengecualian tersuai membolehkan kami mengendalikan jenis pengecualian tertentu dengan cara yang lebih disesuaikan dan teratur. Dengan memperluaskan kelas pengecualian terbina dalam, kita boleh membuat kelas pengecualian kita sendiri yang mewarisi semua sifat dan kaedah kelas pengecualian, tetapi juga membolehkan kita menambah sifat dan kaedah kita sendiri yang khusus untuk jenis pengecualian kita cuba mengendalikan. Ini membolehkan kita mempunyai lebih banyak kawalan ke atas bagaimana pengecualian kita dikendalikan, dan boleh menjadikan kod kita lebih mudah dibaca dan dikekalkan.
Selain itu, dengan membuat kelas pengecualian tersuai, kita dapat menangkap jenis pengecualian tertentu dan mengendalikannya secara berbeza, bergantung kepada masalah tertentu yang berlaku. Untuk membuat kelas pengecualian tersuai, kita boleh menentukan kelas baru dan memperluaskan pengecualian seperti ini:
<span>class DivideByZeroException extends Exception {} </span>
Kemudian, kemudian, kita boleh menggunakan kelas ini sebagai jenis pengecualian membuang:
<span>function divide($a, $b) { </span> <span>if ($b == 0) { </span> <span>throw new DivideByZeroException('Cannot divide by zero'); </span> <span>} </span> <span>return $a / $b; </span><span>} </span> <span>try { </span> <span>echo divide(5, 0); </span><span>} catch (DivideByZeroException $e) { </span> <span>echo 'An error occurred: ' . $e->getMessage(); </span><span>} </span>
Berikut adalah contoh bagaimana kita boleh menambah kaedah CustomErrormessage () ke kelas pengecualian tersuai:
<span>class DivideByZeroException extends Exception { </span> <span>public function customErrorMessage() { </span> <span>$message = "Error on line " . $this->getLine() . " in file " . $this->getFile() . ": " . $this->getMessage(); </span> <span>return $message; </span> <span>} </span><span>} </span>
Dalam contoh ini, kami telah menambahkan satu kaedah yang dipanggil CustomErrormessage ke kelas DivebyZeroException. Kaedah ini menggunakan kaedah getLine (), getFile (), dan getMessage () kelas pengecualian untuk membina mesej ralat tersuai.
kita boleh menggunakan kaedah tersuai ini di blok tangkapan seperti ini:
<span>try { </span> <span>// code that may throw an exception </span> <span>$file = fopen('nonexistent.txt', 'r'); </span><span>} catch (Exception $e) { </span> <span>// code to handle the exception </span> <span>echo 'An error occurred: ' . $e->getMessage(); </span><span>} </span>
kaedah getLine () mengembalikan nombor baris di mana pengecualian dilemparkan dan kaedah getFile () mengembalikan nama fail di mana pengecualian dilemparkan, yang membolehkan kita mempunyai mesej ralat yang lebih bermaklumat. Dengan kaedah CustomErrormessage ini, output akan menjadi seperti "ralat on line (nombor baris) dalam fail (nama fail): tidak boleh membahagikan sifar", dan ia akan memberikan maklumat yang lebih terperinci sekiranya kita perlu debug pengecualian.
Dengan cara ini, kita boleh menambah fungsi tersuai, atau membuang pelbagai jenis pengecualian untuk dikendalikan dengan cara yang berbeza.
Pengecualian adalah alat yang berkuasa untuk menangani kesilapan dan situasi yang tidak dijangka dalam PHP. Mereka membolehkan kami memisahkan aliran normal pelaksanaan kod dari pengendalian ralat, menjadikan kod kami lebih mantap dan kurang terdedah kepada pepijat. Dengan menggunakan pengecualian dalam bentuk lemparan, cuba dan tangkap kata kunci, dan memanfaatkan kuasa pengecualian tersuai dalam kod kami, kami boleh menjadikannya lebih mantap, boleh dibaca, dan dikekalkan.
Dalam PHP, kedua -dua kesilapan dan pengecualian digunakan untuk mengendalikan pelbagai jenis situasi yang bermasalah dalam program. Kesalahan adalah masalah serius yang menghalang program daripada terus berjalan. Ia biasanya disebabkan oleh isu kod atau masalah sistem. Sebaliknya, pengecualian adalah keadaan yang mengubah aliran normal pelaksanaan program. Ia biasanya digunakan untuk mengendalikan situasi yang diharapkan tetapi berpotensi bermasalah, seperti input tidak sah atau fail yang tidak dijumpai. Tidak seperti kesilapan, pengecualian boleh ditangkap dan dikendalikan dalam program menggunakan blok percubaan. Memperluaskan kelas pengecualian terbina dalam. Anda boleh menambah sifat dan kaedah tersuai ke kelas pengecualian anda untuk memberikan maklumat yang lebih spesifik mengenai keadaan yang luar biasa. Berikut adalah contoh:
anda kemudian boleh membuang dan menangkap pengecualian tersuai anda seperti pengecualian standard.
Bagaimana saya boleh mengendalikan pelbagai pengecualian dalam php?
Dalam php, anda boleh mengendalikan pelbagai pengecualian dengan menggunakan pelbagai blok tangkapan. Setiap blok tangkapan mengendalikan jenis pengecualian tertentu. Apabila pengecualian dilemparkan, blok tangkapan diperiksa dengan teratur, dan yang pertama yang dapat mengendalikan pengecualian yang dibuang dilaksanakan. Berikut adalah contoh:
} tangkapan (pengecualian $ e ) { Akhirnya blok dalam pengendalian pengecualian PHP digunakan untuk menentukan kod yang harus dilaksanakan tanpa mengira sama ada pengecualian dilemparkan atau tidak. Ini berguna untuk kod pembersihan yang harus selalu dijalankan, seperti menutup fail atau sambungan pangkalan data. Blok Akhirnya adalah pilihan dan ditambah selepas blok tangkapan. cubalah { } fungsi myExceptionHandler ($ exception) {
} Apakah tujuan blok akhirnya dalam pengendalian pengecualian PHP?
Bagaimana saya boleh mengutuk pengecualian dalam php? blok. Ini berguna apabila anda ingin mengendalikan pengecualian sebahagiannya dan biarkan ia menyebarkan ke tahap yang lebih tinggi untuk pengendalian selanjutnya. Berikut adalah contoh:
// kod yang boleh membuang pengecualian
} tangkapan (pengecualian $ e) {
lemparkan $ e ; / mesej pengecualian. Kaedah ini ditakrifkan dalam kelas pengecualian dan boleh dipanggil pada mana -mana objek kelas yang memanjangkan pengecualian. Mesej pengecualian biasanya ditetapkan apabila pengecualian dilemparkan, seperti ini: Buang pengecualian baru ("Mesej ralat").
Bagaimana saya dapat menangkap semua pengecualian dalam php? Boleh menangkap semua pengecualian dengan menggunakan blok tangkapan dengan kelas pengecualian. Ini akan menangkap apa -apa pengecualian yang merupakan contoh kelas pengecualian atau subkelasnya. Berikut adalah contoh:
cubalah {} tangkapan (pengecualian $ e) {
// mengendalikan semua pengecualian Apakah penggunaan kaedah gettraceasstring dalam pengendalian pengecualian PHP? Jejak timbunan adalah senarai panggilan fungsi yang sedang berjalan apabila pengecualian dilemparkan. Ini berguna untuk debugging, kerana ia menunjukkan urutan fungsi panggilan yang membawa kepada pengecualian. Pengecualian tanpa menangkapnya dalam PHP. Walau bagaimanapun, jika pengecualian dilemparkan dan tidak ditangkap, ia akan mengakibatkan kesilapan maut dan program akan ditamatkan. Oleh itu, ia secara amnya adalah amalan yang baik untuk sentiasa menangkap apa -apa pengecualian yang anda buang. Fungsi Pengendali Pengecualian dengan fungsi set_exception_handler. Fungsi ini akan dipanggil apabila pengecualian dibuang dan tidak ditangkap. Berikut adalah contoh:
}
set_exception_handler ('myExceptionHandler');
Atas ialah kandungan terperinci Petua Pantas: Cara Mengendalikan Pengecualian di PHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!