PHP - Penanganan Kesalahan
Halo sana, para pengembang PHP yang berbakat! Hari ini, kita akan melihat dunia menarik penanganan kesalahan dalam PHP. Jangan khawatir jika Anda masih baru dalam pemrograman; saya akan mengajarkan Anda setiap konsep secara bertahap, seperti yang saya lakukan untuk ribuan murid selama tahun-tahun mengajar saya. Jadi, ambil secangkir kopi (atau minuman kesukaan Anda), dan mari kita mulai!
Fungsi die()
Mari kita mulai dengan fungsi sederhana tapi kuat: die()
. Fungsi ini seperti menekan tombol penghentian darurat pada kode Anda. Ketika PHP menemukan die()
, dia 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 custom kita. Itu seperti mengatakan ke PHP, "Jika Anda tidak bisa melakukan ini, hanya berhenti saja dan beritahu saya!"
Fungsi Penanganan Kesalahan
Sekarang, mari kita tingkatkan permainan penanganan kesalahan kita dengan fungsi penanganan kesalahan custom. Ini seperti memiliki asisten pribadi Anda untuk mengurus kesalahan.
Ini adalah cara Anda bisa 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 kesalahan
echo($undefined_variable);
?>
Dalam contoh ini, kita membuat fungsi myErrorHandler
yang memberikan informasi detil tentang setiap kesalahan yang terjadi. Kita kemudian mengatakan kepada PHP untuk menggunakan fungsi ini dengan set_error_handler()
. Ketika kita mencoba untuk menampilkan variabel yang belum didefinisikan, penanganan kesalahan custom kita berjalan, memberikan pesan yang ramah dan informatif.
Kelas ArithmeticError
PHP 7 memperkenalkan beberapa kelas kesalahan baru, termasuk ArithmeticError
. Kelas ini dilempar saat terjadi kesalahan 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 diperbolehkan. PHP menangkap ini dengan ArithmeticError
, dan kita menangani nya dengan halus.
Kesalahan Pembagian Nol
Ingat di kelas matematika saat guru Anda mengatakan Anda tidak bisa 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 custom.
Kesalahan Jumlah Argumen
Apakah Anda pernah menelpon 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.
Kesalahan Tipe
TypeError
dilempar saat nilai bukan tipe yang diharapkan. Itu seperti memesan pizza dan mendapat hamburger instead!
<?php
function addNumbers(int $a, int $b) {
return $a + $b;
}
try {
echo addNumbers("5", "10"); // Kita sedang mengirimkan string, bukan integer!
} catch (TypeError $e) {
echo "Oops! " . $e->getMessage();
}
?>
Di sini, fungsi addNumbers
mengharapkan integer, tetapi kita mengirimkan string. PHP menangkap kesalahan penyesuaian tipe dan melempar TypeError
.
Penanganan Eksepsi di PHP
Eksepsi di PHP seperti jaring keselamatan di dalam sirkus. 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 umur untuk memasuki suatu tempat. Kita menggunakan try
untuk mencoba kode, catch
untuk menangani setiap eksepsi, dan finally
untuk menjalankan kode tanpa mengira apakah terjadi eksepsi ataukah.
Membuat Penanganan Eksepsi Custom
Akhirnya, mari kita buat penanganan eksepsi custom kita sendiri. 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 memberikan pesan kesalahan detil untuk alamat email yang tidak valid. Kita kemudian menggunakan eksepsi custom ini untuk menangani kesalahan saat memvalidasi alamat email.
Dan begitu juga! Kita telah melihat berbagai teknik penanganan kesalahan di PHP. Ingat, penanganan kesalahan yang bagus adalah seperti memakai sabuk keselamatan - mungkin terlihat tak penting sampai Anda benar-benar membutuhkannya. Terus latih konsep ini, dan segera Anda akan menangani kesalahan seperti seorang ahli!
Metode | Deskripsi |
---|---|
die() | Menghentikan eksekusi skrip dan menampilkan pesan |
set_error_handler() | Menetapkan fungsi penanganan kesalahan pengguna |
try-catch | Digunakan untuk penanganan eksepsi |
throw | Digunakan untuk melempar eksepsi |
finally | Menentukan kode untuk dijalankan tanpa mengira apakah terjadi eksepsi |
kelas kesalahan custom | Memungkinkan pembuatan jenis kesalahan tertentu |
Semangat pemrograman, dan ingat - dalam pemrograman, kesalahan adalah kesempatan untuk belajar dan meningkatkan kode Anda!
Credits: Image by storyset