Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Pengecualian Tersuai PHP

Pengecualian Tersuai PHP

WBOY
WBOYasal
2024-08-29 13:06:10418semak imbas

Aliran biasa skrip berhenti apabila ralat berlaku, dan pengecualian boleh digunakan untuk menukar perkara yang sama. Pengguna boleh mentakrifkan pengecualian mengikut keperluan sama ada perpustakaan, syarikat atau aplikasi kami dengan melanjutkan kelas pengecualian yang telah terbina dalam pangkalan kod PHP. Di sini kita akan melihat sifat dan ahli, yang semuanya berada dalam jangkauan kelas kanak-kanak, yang diambil daripada kelas pengecualian terbina dalam.

IKLAN Kursus Popular dalam kategori ini PEMBANGUN PHP - Pengkhususan | 8 Siri Kursus | 3 Ujian Olok-olok

Mulakan Kursus Pembangunan Perisian Percuma Anda

Pembangunan web, bahasa pengaturcaraan, ujian perisian & lain-lain

Di bawah ialah perkara yang berlaku apabila pengecualian berlaku:

  • Keadaan kod sekarang disimpan dahulu.
  • Pengendali pengecualian akan sama ada terus melaksanakan daripada keadaan kod yang disimpan, menamatkan pelaksanaannya atau meneruskan pelaksanaan dari tempat lain kod.

Beri tahu kami sebab kami perlu memperibadikan pengecualian tertentu selain daripada pengecualian terbina dalam:

  • Kami boleh dengan mudah mengenali kelas, sambungan atau rentetan yang menjana pengecualian dalam hierarki kod.
  • Dengan menggunakan ini, pembangun dapat mengesan isu dalam kod dengan mudah.
  • Ia boleh digunakan untuk penjenamaan pengecualian perpustakaan tertentu seperti DOM, PDO, dll.
  • Kami boleh mengkonfigurasi seberapa banyak pengecualian tersuai seperti yang diperlukan.

Sintaks Pengecualian Tersuai PHP

Untuk pengecualian tersuai dilemparkan, kita hanya perlu melanjutkan kelas lain daripada kelas Pengecualian, yang sudah terbina dalam.

namespace CustExcep;
class CustException extends \Exception { }

Dengan kelas CustException di atas kini dicipta, kami boleh membuang pengecualian tersuai seperti di bawah:

throw new \CustExcep\CustException('Insert an Exception message here');

Kami juga boleh menyesuaikan ini seperti yang diperlukan untuk mengatasi sifat kelas tertentu seperti fail, kod, baris dan mesejnya atau dengan menggunakan kaedah __toString() untuk memaksa mesej pengecualian ini kepada format yang perlu kami kerjakan.

Menggunakan Fungsi Tersuai dalam PHP

Mari kita lihat fungsi fungsi ini dengan mengambil beberapa contoh:

Contoh #1

Kod:

<?php
/**
* Here defining a class for custom exception
*/
class CustException extends Exception
{
// Here we are redefining the exception message so it is not optional
public function __construct($exmsg, $val = 0, Exception $old = null) {
// random code goes here
$exmsg = 'Default';
// ensure assignment of all values correctly
parent::__construct($exmsg, $val, $old);
}
// representing the custom string object
public function __toString() {
return __CLASS__ . ": [{$this->code}]: {$this->message}\n";
}
public function custFunc() {
echo "Insert any custom message here\n";
}
}
/**
* This class to test the exception
*/
class ExceptionTest
{
public $var;
const NO_EXCEPTION = 0;
const CUST_EXCEPTION = 1;
const DEF_EXCEPTION = 2;
function __construct($val = self::NO_EXCEPTION) {
switch ($val) {
case self::CUST_EXCEPTION:
// throw custom exception
throw new CustException('1 is considered as invalid', 5);
break;
case self::DEF_EXCEPTION:
// throw default one.
throw new Exception('2 is considered an invalid parameter', 6);
break;
default:
// Will not throw any exception and creates an object here
$this->var = $val;
break;
}
}
}
// Example 1
try {
$new = new ExceptionTest(ExceptionTest::CUST_EXCEPTION);
} catch (CustException $exp) { // This exception will be caught
echo "Test custom exception is caught\n", $exp;
$exp->custFunc();
} catch (Exception $exp) { // This is skipped
echo "Default exception is caught here\n", $exp;
}

Output:

Pengecualian Tersuai PHP

Penjelasan:

  • Dalam contoh ini, kita akan melihat cara untuk membuang pengecualian kita tersuai. Untuk melakukan ini, pertama, kami mentakrifkan kelas untuk tujuan ini, dan dalam ini, kami mentakrifkan semula mesej pengecualian menggunakan pembina untuk menjadikannya bukan pilihan. Kami menetapkan mesej pengecualian kepada beberapa teks lalai. Di sini kita harus memastikan bahawa semua parameter yang kita gunakan ditetapkan dengan betul. Ini membawa kepada kesilapan. Kami kemudian mencipta fungsi lain yang dipanggil custFunc() dan mentakrifkan mesej pengecualian tersuai kami di sini.
  • Kami menggunakan pernyataan suis untuk mentakrifkan 3 pengecualian tersuai berbeza untuk 3 nilai ini, dan dalam kes lalai, ia tidak akan membuang sebarang pengecualian dan mencipta objek yang diperlukan.
  • Untuk mencuba ini, kami cuba mencipta objek baharu dengan menghantar nilai sebagai CUST_EXCEPTION. Di sini kami akan memanggil kaedah custFunc() kami yang ditakrifkan pada mulanya. Oleh itu, ini akan mengambil mesej pengecualian yang ditakrifkan dan memaparkan yang sama.

Contoh #2

Kod:

<?php
class custException extends Exception {
public function custMsg() {
//error message
$errorMsg = 'Error on line '.$this->getLine().' in '.$this->getFile()
.': <b>'.$this->getMessage().'</b> is not a valid password. Please enter a valid one.';
return $errorMsg;
}
}
$pwd = "Password@123";
try {
//validation
if(filter_var($pwd, FILTER_VALIDATE_EMAIL) === FALSE) {
//exception thrown if password invalid
throw new custException($pwd);
}
}
catch (custException $error) {
//show custom error
echo $error->custMsg();
}
?>

Output:

Pengecualian Tersuai PHP

Penjelasan:

  • Dalam mesej ini, kami juga mendapat nombor baris untuk membuang ralat yang betul. Kami memasukkan nilai kata laluan dan kemudian membandingkannya dengan VALIDATE_PWD. Jika ini kembali benar, tiada pengecualian dilemparkan; jika keputusannya palsu, ia membuang pengecualian tersuai kami.

Kelebihan PHP Custom Exception

Diberikan di bawah adalah kelebihannya:

  • Pengecualian terbina dalam adalah bagus, tetapi pengecualian tersuai mempunyai kepentingan yang lebih dari sudut pandangan pembangun kerana ia boleh menyasarkan dan menangkap pengecualian di mana-mana sahaja dia mahu.
  • Mudah untuk nyahpepijat kerana pembangun boleh menentukan pengecualian tersuai pada berbilang titik dan mengendalikan perkara yang sama.
  • Boleh mengubah suai kelas Exception sedia ada dengan mudah dan menggunakannya dengan cara yang lebih cekap dengan memanjangkannya.
  • Ia berguna untuk menangkap pengecualian "tidak ditangkap".

Kesimpulan

Dalam artikel ini, kami melihat konsep penentuan tersuai dan pengendalian pengecualian. Terdapat juga kes lain di mana ini boleh digunakan, seperti dalam blok cuba-tangkap, dengan melontar berbilang pengecualian, melontar semula pengecualian tertentu, menetapkan pengendali pengecualian kelas atas, dsb.

Atas ialah kandungan terperinci Pengecualian Tersuai PHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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 sebelumnya:Kelas Akhir PHPArtikel seterusnya:Kelas Akhir PHP