PHP - Penyelarasan
Antara MukaThrowable
Dalam PHP, penyelesaian adalah objek yang mewakili keadaan yang luar biasa. Mereka dilempar ketika kesalahan tertentu berlaku dalam kod anda. PHP menyediakan antara muka Throwable
, yang adalah kelas asas untuk semua penyelesaian dan kesalahan. Ia mempunyai beberapa method yang membolehkan anda mengendalikan penyelesaian secara berkesan.
Penyelarasan Penyelesaian Asas
Untuk mengendalikan penyelesaian dalam PHP, anda boleh menggunakan blok try-catch
. Berikut adalah contoh:
<?php
try {
// Kod yang mungkin lempar penyelesaian
throw new Exception("An error occurred!");
} catch (Exception $e) {
// Kod untuk mengendalikan penyelesaian
echo "Caught exception: " . $e->getMessage();
}
?>
Dalam contoh ini, kami menggunakan pernyataan throw
untuk membuat objek Exception
baru dengan mesej tersendiri. Jika penyelesaian dilempar di dalam blok try
, pelaksanaan kod melompat ke blok catch
yang berkaitan, di mana penyelesaian ditangkap dan disembahkan.
set_exception_handler
Fungsi set_exception_handler
membolehkan anda menentukan fungsi tersendiri yang akan dipanggil setiap kali penyelesaian yang belum ditangkap dilempar. Fungsi ini harus mengambil dua parameter: objek penyelesaian dan boolean yang menunjukkan sama ada penyelesaian dilempar semasa panggilan ke eval()
.
Berikut adalah contoh bagaimana untuk menggunakan set_exception_handler
:
<?php
function myExceptionHandler($exception) {
echo "Uncaught exception: " . $exception->getMessage();
}
set_exception_handler('myExceptionHandler');
// Kod yang lempar penyelesaian
throw new Exception("Oops! Something went wrong.");
?>
Dalam contoh ini, kami tentukan fungsi penangan penyelesaian tersendiri yang dipanggil myExceptionHandler
. Kemudian kami gunakan set_exception_handler
untuk menetapkan fungsi ini sebagai penangan penyelesaian default. Ketika penyelesaian yang belum ditangkap dilempar, fungsi custom kami akan dipanggil bukannya yang default.
Penyelesaian SPL
PHP menyediakan beberapa kelas penyelesaian terbina-dalam di Standard PHP Library (SPL). Kelas-kelas ini mengembangkan kelas Exception
dan menyediakan maklumat yang lebih khusus tentang jenis-jenis penyelesaian yang berbeza. Beberapa penyelesaian SPL biasa termasuk:
-
BadFunctionCallException
: Dilempar ketika callback merujuk kepada fungsi yang belum ditentukan atau jika beberapa argumen hilang. -
DomainException
: Digunakan untuk kesalahan dalam logik domain aplikasi anda. -
InvalidArgumentException
: Diangkat ketika fungsi diberikan argumen yang tidak diterima. -
LengthException
: Digunakan ketika operasi cuba menggunakan objek dengan panjang yang salah. -
OutOfBoundsException
: Dilempar ketika indeks array diluar batas. -
OutOfRangeException
: Diangkat ketika nilai tidak dalam julat yang dijangkakan. -
RangeException
: Digunakan ketika nilai tidak dalam julat yang ditentukan. -
RuntimeException
: Penyelesaian umum untuk kesalahan pelaksanaan. -
UnderflowException
: Dilempar ketika terjadi underflow (contohnya, mengurangkan dari stack kosong). -
UnexpectedValueException
: Diangkat ketika nilai tidak sesuai dengan jenis yang dijangkakan.
Anda boleh menggunakan penyelesaian SPL ini dalam kod anda seperti mana kelas penyelesaian lain. Sebagai contoh:
<?php
function divide($a, $b) {
if ($b == 0) {
throw new DivisionByZeroError("Division by zero is not allowed.");
}
return $a / $b;
}
try {
echo divide(10, 0);
} catch (DivisionByZeroError $e) {
echo "Caught exception: " . $e->getMessage();
}
?>
Penyelesaian Didefinisikan Pengguna
Selain menggunakan penyelesaian SPL terbina-dalam, anda juga boleh membuat kelas penyelesaian tersendiri. Untuk ini, hanya perlu mengembangkan kelas Exception
dan menambahkan fungsi tambahan yang anda perlukan. Berikut adalah contoh:
<?php
class MyCustomException extends Exception {
public function __construct($message, $code = 0, Exception $previous = null) {
parent::__construct($message, $code, $previous);
}
}
try {
throw new MyCustomException("This is a custom exception.");
} catch (MyCustomException $e) {
echo "Caught custom exception: " . $e->getMessage();
}
?>
Dalam contoh ini, kami membuat kelas baru dipanggil MyCustomException
yang mengembangkan kelas Exception
. Kemudian kami lempar dan tangkap contoh penyelesaian ini seperti mana penyelesaian lain.
Dengan mengikuti panduan ini dan menggunakan alat yang disediakan, anda boleh mengendalikan penyelesaian dalam kod PHP anda dan memastikan bahawa aplikasi anda kukuh dan tahan terhadap kesalahan yang tidak dijangkakan. Ingatlah untuk selalu menguji kod anda secara menyeluruh dan mengendalikan penyelesaian dengan halus untuk memberikan pengalaman pengguna yang lebih baik.
Credits: Image by storyset