PHP - PenangananRalat
Hai sana, para pengembang PHP yang bersemangat! Hari ini, kita akan masuk ke dunia menarik penanganan ralat di PHP. Jangan khawatir jika Anda baru saja memulai programming; saya akan mengarahkan Anda melalui setiap konsep secara langkah demi langkah, seperti yang saya lakukan untuk ribuan murid selama tahun-tahun mengajar saya. Jadi, ambil secangkir kopi (atau minuman favorit Anda), dan mari kita mulai!
Fungsi die()
mari kita mulai dengan fungsi yang sederhana namun kuat: die()
. Fungsi ini seperti menekan tombol penghentian darurat pada kode Anda. Ketika PHP menemukan die()
, ia menghentikan eksekusi segera dan menampilkan pesan.
Ini adalah contoh dasar:
<?php
$file = fopen("important_file.txt", "r");
if (!$file) {
die("Oh no! The file couldn't be opened.");
}
echo "If you see this, the file was opened successfully!";
?>
Dalam kode ini, kita mencoba untuk membuka file. Jika gagal, die()
menghentikan segala sesuatu dan menampilkan pesan khusus kami. Itu seperti mengatakan ke PHP, "Jika Anda tidak bisa melakukan ini, hanya berhenti dan beritahu saya!"
Fungsi PenangananRalat Pribadi
Sekarang, mari kita tingkatkan permainan penanganan ralat kita dengan fungsi penanganan ralat pribadi. Ini seperti memiliki asisten pribadi Anda untuk mengurus ralat.
Ini adalah cara Anda membuatnya:
<?php
function myErrorHandler($errno, $errstr, $errfile, $errline) {
echo "<b>Oops! Something went wrong:</b><br>";
echo "Error: [$errno] $errstr<br>";
echo "Error on line $errline in $errfile<br>";
}
set_error_handler("myErrorHandler");
// mari kita memicu ralat
echo($undefined_variable);
?>
Dalam contoh ini, kita membuat fungsi yang disebut myErrorHandler
yang menyediakan informasi detil tentang setiap ralat yang terjadi. Kemudian kita katakan kepada PHP untuk menggunakan fungsi ini dengan set_error_handler()
. Ketika kita mencoba mengeluarkan variabel yang belum didefinisikan, penanganan ralat khusus kita kick in, menyediakan pesan yang ramah dan informatif.
Kelas ArithmeticError
PHP 7 memperkenalkan beberapa kelas ralat baru, termasuk ArithmeticError
. Kelas ini dilempar saat terjadi ralat dalam operasi matematika.
mari kita lihatnya dalam aksi:
<?php
$number = 1;
try {
$result = $number << -1;
} catch (ArithmeticError $e) {
echo "Oops! A math error occurred: " . $e->getMessage();
}
?>
Di sini, kita mencoba melakukan operasi pergeseran bit dengan bilangan negatif, yang tidak diijinkan. PHP menangkap ini dengan ArithmeticError
, dan kita menanganinya dengan mulus.
DivisionByZeroError
Ingat saat kelas matematika Anda saat guru Anda mengatakan Anda tidak dapat membagi dengan nol? Well, PHP ingat juga! DivisionByZeroError
dilempar saat Anda mencoba membagi dengan nol.
<?php
function divide($numerator, $denominator) {
if ($denominator == 0) {
throw new DivisionByZeroError("Whoa there! You can't divide by zero!");
}
return $numerator / $denominator;
}
try {
echo divide(10, 0);
} catch (DivisionByZeroError $e) {
echo "Error: " . $e->getMessage();
}
?>
Dalam contoh ini, kita membuat fungsi divide
yang memeriksa apakah pembagi adalah nol. Jika ya, ia melempar DivisionByZeroError
dengan pesan khusus.
ArgumentCountError
Apakah Anda pernah memanggil seseorang dan lupa apa yang Anda ingin katakan? Well, ArgumentCountError
adalah cara PHP mengatakan, "Hey, Anda lupa memberitahu saya sesuatu yang penting!"
<?php
function greet($name) {
return "Hello, $name!";
}
try {
echo greet(); // Oops, kita lupa menyediakan nama!
} catch (ArgumentCountError $e) {
echo "Error: " . $e->getMessage();
}
?>
Dalam kasus ini, kita memanggil fungsi greet
tanpa menyediakan nama. PHP melempar ArgumentCountError
, yang kita tangkap dan tangani.
TypeError
TypeError
dilempar saat nilai bukan jenis yang diharapkan. Itu seperti memesan pizza dan mendapat hamburger sebagai gantinya!
<?php
function addNumbers(int $a, int $b) {
return $a + $b;
}
try {
echo addNumbers("5", "10"); // Kita sedang mengirim string, bukan integer!
} catch (TypeError $e) {
echo "Oops! " . $e->getMessage();
}
?>
Di sini, fungsi addNumbers
mengharapkan integer, tetapi kita mengirim string. PHP menangkap kesalahan jenis ini dan melempar TypeError
.
Penanganan Eksepsi di PHP
Eksepsi di PHP seperti jaring keselamatan di dalam kawasan seni mempertarungkan. Mereka menangkap kesalahan sebelum mereka menjadi masalah besar. mari kita lihat bagaimana menggunakannya:
<?php
function checkAge($age) {
if ($age < 0) {
throw new Exception("Age can't be negative!");
}
if ($age < 18) {
throw new Exception("Sorry, you must be 18 or older.");
}
return "Welcome! You're old enough.";
}
try {
echo checkAge(15);
} catch (Exception $e) {
echo "Error: " . $e->getMessage();
} finally {
echo "<br>Thanks for using our age checker!";
}
?>
Dalam contoh ini, kita memeriksa apakah seseorang cukup tua untuk memasuki. Kita gunakan try
untuk mencoba kode, catch
untuk menangani setiap eksepsi, dan finally
untuk mengeksekusi kode tanpa menghiraukan apakah ada eksepsi yang dilempar.
Membuat Penanganan Eksepsi Pribadi
Akhirnya, mari kita buat penanganan eksepsi pribadi kami. Ini seperti mendesain sistem pesan kesalahan Anda sendiri!
<?php
class CustomException extends Exception {
public function errorMessage() {
$errorMsg = 'Error on line '.$this->getLine().' in '.$this->getFile()
.': <b>'.$this->getMessage().'</b> is not a valid E-Mail address';
return $errorMsg;
}
}
$email = "[email protected]";
try {
if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE) {
throw new CustomException($email);
}
} catch (CustomException $e) {
echo $e->errorMessage();
}
?>
Di sini, kita membuat kelas CustomException
yang menyediakan pesan kesalahan detil untuk alamat email yang tidak valid. Kita kemudian menggunakan eksepsi ini untuk menangani kesalahan saat memvalidasi alamat email.
Dan itu adalah! Kita telah meliputi banyak teknik penanganan kesalahan di PHP. Ingat, penanganan kesalahan yang bagus seperti memakai sabuk keselamatan - mungkin tampak tak diperlukan sampai Anda benar-benar membutuhkannya. Teruslatih konsep ini, dan segera Anda akan menangani kesalahan seperti seorang pro!
Metode | Deskripsi |
---|---|
die() | Menghentikan eksekusi skrip dan menampilkan pesan |
set_error_handler() | Mengatur fungsi penanganan kesalahan yang didefinisikan pengguna |
try-catch | Digunakan untuk penanganan eksepsi |
throw | Digunakan untuk melempar eksepsi |
finally | Menentukan kode untuk dieksekusi tanpa menghiraukan apakah ada eksepsi yang dilempar |
kelas kesalahan khusus | Memungkinkan pembuatan jenis kesalahan khusus |
Selamat coding, dan ingat - di dunia programming, kesalahan adalah kesempatan untuk belajar dan meningkatkan kode Anda!
Credits: Image by storyset