


Cara PHP Mengendalikan Ralat dan Pengendalian Pengecualian: Panduan Komprehensif
Dec 28, 2024 pm 05:14 PMBagaimanakah 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);
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
- 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);
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
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);
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!");
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);
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
-
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.
-
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!

Alat AI Hot

Undress AI Tool
Gambar buka pakaian secara percuma

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

TOVERSIONAPHP-berasaskan-berasaskan, UseUrl-berasaskan Forversioningforclarityandeaseofrouting, separateVersionedcodetoavoidconflicts, decrecateoldversionswithclearCommunication, andconsidercustomheadershipshenershipshenershipshenershipshenershinlyhenershinlywenershinly

TosecurelyhandleAuthenticationandauthorizationInphp, ikuti: 1.alwayshashpasswordswithpassword_hash () andverifyUsingPassword_verify (), usePePreparedStatementStopreventsqlInjection, andStoreUserDatain $ _SessionAsLogin.2.implescureRoleRoleRoleRoleRole

Proseduralandobject-orientedprogramming (OOP) inphpdiffers significelyinstructure, kebolehgunaan semula, dandatahandling.1.ProceduralProgrammingusesFunctionsaganediediedieds, sesuai, pemodelan

PHPdoesnothaveabuilt-inWeakMapbutoffersWeakReferenceforsimilarfunctionality.1.WeakReferenceallowsholdingreferenceswithoutpreventinggarbagecollection.2.Itisusefulforcaching,eventlisteners,andmetadatawithoutaffectingobjectlifecycles.3.YoucansimulateaWe

Untuk mengendalikan muat naik fail dengan selamat di PHP, terasnya adalah untuk mengesahkan jenis fail, menamakan semula fail, dan menyekat kebenaran. 1. Gunakan finfo_file () untuk memeriksa jenis mime sebenar, dan hanya jenis tertentu seperti imej/jpeg dibenarkan; 2. Gunakan uniqid () untuk menghasilkan nama fail rawak dan simpannya dalam direktori akar bukan web; 3. Hadkan saiz fail melalui borang php.ini dan html, dan tetapkan kebenaran direktori ke 0755; 4. Gunakan Clamav untuk mengimbas malware untuk meningkatkan keselamatan. Langkah -langkah ini dengan berkesan menghalang kelemahan keselamatan dan memastikan bahawa proses muat naik fail adalah selamat dan boleh dipercayai.

Ya, PHP boleh berinteraksi dengan pangkalan data NoSQL seperti MongoDB dan Redis melalui sambungan atau perpustakaan tertentu. Pertama, gunakan pemacu MongoDBPHP (dipasang melalui PECL atau komposer) untuk membuat contoh pelanggan dan mengendalikan pangkalan data dan koleksi, penyisipan sokongan, pertanyaan, pengagregatan dan operasi lain; Kedua, gunakan perpustakaan predis atau lanjutan phpredis untuk menyambung ke REDIS, lakukan tetapan dan pengambilalihan nilai utama, dan mengesyorkan PHPREDI untuk senario berprestasi tinggi, sementara Predis mudah untuk penempatan pesat; Kedua-duanya sesuai untuk persekitaran pengeluaran dan didokumentasikan dengan baik.

Dalam PHP, perbezaan utama antara == dan == adalah ketat pemeriksaan jenis. == Penukaran jenis akan dilakukan sebelum perbandingan, contohnya, 5 == "5" pulangan benar, dan === meminta nilai dan jenis adalah sama sebelum benar akan dikembalikan, sebagai contoh, 5 === "5" mengembalikan palsu. Dalam senario penggunaan, === lebih selamat dan harus digunakan terlebih dahulu, dan == hanya digunakan apabila penukaran jenis diperlukan.

Kaedah menggunakan operasi matematik asas dalam PHP adalah seperti berikut: 1. Tanda tambahan menyokong bilangan bulat dan nombor terapung, dan juga boleh digunakan untuk pembolehubah. Nombor rentetan akan ditukar secara automatik tetapi tidak disyorkan kepada kebergantungan; 2. Tanda -tanda pengurangan - tanda, pembolehubah adalah sama, dan penukaran jenis juga terpakai; 3. Tanda -tanda pendaraban menggunakan tanda *, yang sesuai untuk nombor dan rentetan yang serupa; 4. Bahagian menggunakan / tanda, yang perlu mengelakkan pembahagian dengan sifar, dan perhatikan bahawa hasilnya mungkin nombor terapung; 5. Mengambil tanda modulus boleh digunakan untuk menilai angka ganjil dan bahkan, dan apabila memproses nombor negatif, tanda -tanda selebihnya selaras dengan dividen. Kunci untuk menggunakan pengendali ini dengan betul adalah untuk memastikan bahawa jenis data adalah jelas dan keadaan sempadan ditangani dengan baik.
