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!

PHP - Error Handling

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