PHP Cuba Catch Contoh: Pengecualian & Tutorial Mengendalikan Ralat

Isi kandungan:

Anonim

Apa itu Pengecualian?

Kesalahan adalah hasil program yang tidak dijangka yang tidak dapat ditangani oleh program itu sendiri.

Kesalahan diselesaikan dengan memperbaiki program. Contoh ralat adalah gelung tak terbatas yang tidak pernah berhenti dijalankan.

Pengecualian adalah hasil program yang tidak dijangka yang dapat dikendalikan oleh program itu sendiri.

Contoh pengecualian termasuk mencuba membuka fail yang tidak ada.

Pengecualian ini dapat ditangani dengan membuat fail atau memberikan pilihan kepada pengguna untuk mencari fail tersebut.

Dalam tutorial ini, anda akan belajar-

  • Mengapa menangani pengecualian?
  • Ralat PHP mengendalikan
  • Ralat menangani contoh
  • Perbezaan antara Kesalahan dan Pengecualian
  • Pelbagai Pengecualian
  • Menguji kod

Mengapa menangani pengecualian?

  • Elakkan hasil yang tidak dijangka di halaman kami yang boleh menjengkelkan atau menjengkelkan pengguna akhir kami
  • Tingkatkan keselamatan aplikasi kita dengan tidak mendedahkan maklumat yang mungkin digunakan oleh pengguna jahat untuk menyerang aplikasi kita
  • Pengecualian Php digunakan untuk mengubah aliran normal program sekiranya terdapat ralat yang dapat diramalkan.

Ralat PHP mengendalikan

Apabila berlaku ralat, bergantung pada tetapan konfigurasi anda, PHP memaparkan pesan ralat di penyemak imbas web dengan maklumat yang berkaitan dengan ralat yang terjadi.

PHP menawarkan beberapa cara untuk menangani kesilapan.

Kami akan melihat tiga (3) kaedah yang biasa digunakan;

  1. Pernyataan mati - fungsi mati menggabungkan fungsi gema dan keluar dalam satu. Ia sangat berguna ketika kita ingin mengeluarkan mesej dan menghentikan pelaksanaan skrip apabila berlaku ralat.
  2. Penangan ralat tersuai - ini adalah fungsi yang ditentukan pengguna yang dipanggil setiap kali berlaku ralat.
  3. Pelaporan ralat PHP - mesej ralat bergantung pada tetapan pelaporan ralat PHP anda. Kaedah ini sangat berguna dalam persekitaran pembangunan apabila anda tidak tahu apa yang menyebabkan kesalahan tersebut. Maklumat yang dipaparkan dapat membantu anda menyahpepijat aplikasi anda.

Ralat menangani contoh

Sekarang mari kita lihat beberapa contoh mudah dengan rutin pengendalian ralat.

Anggaplah kita telah mengembangkan aplikasi yang menggunakan fail teks untuk menyimpan data. Kami mungkin ingin memeriksa keberadaan fail sebelum kami berusaha membaca data darinya.

Kod di bawah menerapkan contoh di atas.

Dengan andaian anda menyimpan fail simple_error.php dalam folder phptuts, buka URL http: //localhost/phptuts/simple_error.php

Anda akan mendapat keputusan berikut

Seperti yang anda lihat dari hasil di atas, ini menjadikan aplikasi kami kelihatan tidak profesional dan boleh mengganggu pengguna.

Kami akan mengubah kod di atas dan menulis pengendali ralat untuk aplikasi

Dengan andaian anda menyimpan kod di atas sebagai error_handling.php, buka URL http: //localhost/phptuts/error_handling.php

Catatan: adalah amalan keselamatan yang baik untuk memaparkan mesej seperti yang ditunjukkan di atas dan bukannya menunjukkan mesej seperti "Fail tidak dijumpai".

Mari lihat contoh lain yang menggunakan pengendali ralat tersuai.

Pengendali ralat tersuai akan ditetapkan sebagai fungsi pengendalian ralat PHP lalai dan pada dasarnya akan memaparkan nombor dan mesej ralat.

Kod di bawah menggambarkan pelaksanaan contoh di atas

Buka URL http: //localhost/phptuts/custom_error_handler.php anda akan mendapat hasil berikut

.

Seperti yang dapat anda lihat dari contoh di atas, pengendali ralat tersuai sangat kuat dalam hal ini

  • Mereka membolehkan kita menyesuaikan pesanan ralat.
  • Pengendali ralat tersuai juga boleh merangkumi kesalahan masuk dalam fail / pangkalan data, menghantar e-mel kepada pembangun dll.

Sekarang mari kita lihat jenis pengendalian ralat ketiga. Kami akan menggunakan fungsi built-in error_reporting PHP. Ia mempunyai sintaks asas berikut

DI SINI,

  • "Error_reporting" adalah fungsi pelaporan kesalahan PHP
  • "$ Report_level" adalah opsional, dapat digunakan untuk menetapkan tingkat pelaporan. Jika tidak ada tingkat pelaporan yang ditentukan, PHP akan menggunakan tingkat pelaporan kesalahan lalai seperti yang ditentukan dalam file php.ini.
Tahap Pelaporan Penerangan Contohnya
E_WARNING Memaparkan mesej amaran sahaja. Tidak menghentikan pelaksanaan skrip ralat_laporan (E_WARNING);
E_NOTICE Menampilkan pemberitahuan yang dapat terjadi selama pelaksanaan program normal atau mungkin kesalahan. ralat_laporan (E_ PEMBERITAHUAN);
E_USER_ERROR Memaparkan kesalahan yang dihasilkan pengguna iaitu pengendali ralat tersuai ralat_laporan (E_ USER_ERROR);
E_USER_WARNING Memaparkan mesej amaran yang dihasilkan pengguna pelaporan ralat (E_USER_WARNING);
E_USER_NOTICE Memaparkan notis yang dihasilkan pengguna ralat_laporan (E_USER_NOTICE);
E_RECOVERABLE_ERROR Memaparkan ralat yang tidak membawa maut dan dapat ditangani menggunakan pengendali ralat tersuai ralat_laporan (E_RECOVERABLE_ERROR);
E_ALL Memaparkan semua kesalahan dan amaran ralat_laporan (E_ ALL);

Perbezaan antara Kesalahan dan Pengecualian

  • Pengecualian dilemparkan dan dimaksudkan untuk ditangkap sementara kesalahan umumnya tidak dapat dipulihkan.
  • Pengecualian dikendalikan dengan cara berorientasikan objek.

    Ini bermaksud apabila pengecualian dilemparkan; objek pengecualian dibuat yang mengandungi butiran pengecualian.

Jadual di bawah menunjukkan kaedah objek pengecualian

Kaedah Penerangan Contohnya
getMessage () Memaparkan mesej pengecualian
getMessage();?>
dapatkan kod() Memaparkan kod numerik yang mewakili pengecualian
getCode();?>
getFile () Memaparkan nama dan jalan fail di mana pengecualian berlaku
getFile();?>
getLine () Memaparkan nombor garis di mana pengecualian berlaku
getLine();?>
getTrace () Memaparkan susunan jejak belakang sebelum pengecualian
getTrace());?>
dapatkanSebelumnya () Memaparkan pengecualian sebelumnya sebelum yang sekarang
getPrevious();?>
getTraceAsString () Memaparkan pengecualian belakang pengecualian sebagai rentetan dan bukannya array
getTraceAsString();?>
__menjalin() Memaparkan keseluruhan pengecualian sebagai rentetan
__toString();?>

Berikut adalah sintaks asas untuk membuang pengecualian.

DI SINI,

  • "Membuang" adalah kata kunci yang digunakan untuk membuang pengecualian
  • "Pengecualian baru (...)" membuat objek pengecualian dan melewati "Ini adalah contoh pengecualian" string sebagai parameter pesan.

Kod di atas mengeluarkan mesej berikut.

Kita sekarang akan melihat contoh yang melaksanakan pengecualian lemparan dan tangkapan.

Kami akan mengubah contoh di atas dan memasukkan cubaan, lemparan dan tangkapan.

Ia mempunyai sintaks asas berikut.

DI SINI,

  • "Cuba {…}" adalah sekatan kod yang akan dilaksanakan yang berpotensi menimbulkan pengecualian
  • "Catch (Exception $ e) {…}" adalah blok kod yang menangkap pengecualian yang dilemparkan dan memberikan objek pengecualian kepada pemboleh ubah $ e.

Kod di bawah menunjukkan contoh pengecualian asas dengan pengecualian try, throw and catch yang dilaksanakan.

Program ini dengan sengaja melontarkan pengecualian yang kemudian dilakukan.

getMessage();echo "";echo "getCode(): " . $e->getCode();echo "";echo "__toString(): " . $e->__toString();}?>

Buka URL http: //localhost/phptuts/exception_handling.php Anda akan mendapat hasil berikut.

Anda juga boleh membuat beberapa pengecualian untuk satu pernyataan percubaan php bergantung pada jenis pengecualian yang dilemparkan.

Lihat artikel mengenai MySQL, akses data PHP

... untuk contoh pelaksanaan beberapa pengecualian

Pelbagai Pengecualian

Pelbagai pengecualian menggunakan blok cubaan tangkapan untuk menangani pengecualian yang dilemparkan. Pelbagai pengecualian berguna apabila;

  • Anda ingin memaparkan pesanan khusus bergantung pada pengecualian yang dilemparkan
  • Anda ingin melakukan operasi unik bergantung pada pengecualian yang dilemparkan

Carta alir di bawah menggambarkan bagaimana pelbagai pengecualian berfungsi

Mari lihat contoh yang menggunakan pelbagai pengecualian.

Kami akan mengubah kod yang membahagi nombor dengan penyebut yang disahkan.

Kami menjangkakan dua jenis pengecualian akan berlaku;

  • Pembahagian dengan sifar
  • Pembahagian dengan nombor negatif

Demi kesederhanaan, kami hanya akan memaparkan jenis pengecualian di blok tangkapan kami.

PHP yang dibina dalam kelas Exception digunakan untuk membuang pengecualian.

Kami akan membuat dua kelas yang memperluas kelas pengecualian dan menggunakannya untuk membuang pengecualian.

Kod di bawah menunjukkan pelaksanaannya.

Menguji kod

Kami akan menganggap anda menyimpan multiple_exceptions.php dalam folder phptuts.

Semak imbas ke URL http: //localhost/phptuts/multiple_exceptions.php

Beralih kembali ke fail PHP dan lulus -1 sebagai parameter seperti yang ditunjukkan dalam rajah berikut.

Semak imbas ke URL http: //localhost/phptuts/multiple_exceptions.php .

Apa hasil yang anda dapat? Lulus 3 sebagai parameter.

Apa hasil yang anda dapat?

Ringkasan

  • Kesalahan adalah hasil yang tidak dijangka dihasilkan oleh kod PHP
  • Kesalahan pengendalian meningkatkan prestasi aplikasi
  • PHP mempunyai fungsi yang dapat digunakan untuk menyesuaikan cara PHP melaporkan kesalahan
  • Pengecualian seperti kesalahan, tetapi ia dapat ditangkap menggunakan blok tangkapan ketika dilemparkan.
  • Memaparkan mesej ralat yang menunjukkan maklumat kesalahan dianggap sebagai amalan keselamatan yang buruk.