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;
- 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.
- Penangan ralat tersuai - ini adalah fungsi yang ditentukan pengguna yang dipanggil setiap kali berlaku ralat.
- 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 pengecualianPelbagai 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.