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-olokMulakan Kursus Pembangunan Perisian Percuma Anda
Pembangunan web, bahasa pengaturcaraan, ujian perisian & lain-lain
Di bawah ialah perkara yang berlaku apabila pengecualian berlaku:
Beri tahu kami sebab kami perlu memperibadikan pengecualian tertentu selain daripada pengecualian terbina dalam:
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.
Mari kita lihat fungsi fungsi ini dengan mengambil beberapa contoh:
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:
Penjelasan:
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:
Penjelasan:
Diberikan di bawah adalah kelebihannya:
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!