Penggunaan fungsi THROWABLE pada PHP

Hai Sipinter! Kembali lagi ke sesi Tutorial Pemrograman PHP dimana disini kita akan membahas tuntas cara membuat web dinamis dari dasar menggunakan PHP.

Kali ini kita akan membahas bagaimana cara mengelola error yang terjadi pada program kita di PHP dengan try catch.

Terkadang ada beberapa kemungkinan yang bisa membuat proses kita tidak berjalan bahkan membuat program menjadi error.

Jika terjadi error ketika sebuah program dijalankan ini akan membuat pengguna kita akan kebingungan untuk menanganinya.

PHP memberikan kepada kita layanan untuk mengelola kondisi error tertentu yang terjadi dalam program kita dengan try catch.

Dengan try catch kita bisa mengelola semua kemungkinan error yang terjadi, agar program yang kita buat dapat berjalan semestinya.

Aturan penulisan Try and Catch

<?php
try {
	//perintah yang akan dijalankan
} catch (Exception $e) {
	//perintah yang dijalankan jika terjadi error
} finally{
	//Peritah yang pasti ingin kita jalankan
}
?>

Penjelasan :

  • try : merupakan tempat kita meletakan perintah yang akan kita tangani error didalamnya.
  • catcth : block ini akan dijalankan ketika terjadi error pada perintah yang ada di blok try. catch akan menangkap semua error atau error tertentu yang kita inginkan sesuai kebutuhan. catch bisa lebih dari satu.
  • finally: Bisa tidak digunakan. blok perintah ini akan terus dijalankan baik ketika tidak terjadi error sekalipun.

Berikut adalah cara mendefinisikan sebuah kondisi tertentu ke dalam Exception dengan pesan baru:

throw new NamaException("pesan eroor baru", 1);

Cara Membuat Pengelola Error baru di PHP

Misal kita akan akan membuat fungsi untuk menampilkan hello word sebanyak yang diinginkan, jika nilai parameter yang dimasukan kurang dari satu maka tidak ada pesan yang ditampilkan:

Penggunaan fungsi THROWABLE pada PHP
Penggunaan fungsi THROWABLE pada PHP

Kita dapat definisikan nilai parameter kurang dari satu sebagai pengecualian (Exception), maka kesalahan tersebut dapat ditangkap fungsi try catch:

Kunjungi: Percabangan if di PHP dan Cara Membuat fungsi di PHP

<?php
	function TampilHello($a){
		try{
			if ($a<1) {
				throw new Exception("Masukan Angka Lebih Dari satu", 1);
				
			} else {
				for($i=1;$i<=$a;$i++){
					echo "$i Hello World <br/>";
				}
			}
		}catch(Exception $e){
			echo "Maaf : ".$e->getMessage()." <br/>";
		}		
		
	}
	
	//ketika nilai parameter kurang dari satu
	TampilHello(0);
?>

hasil nya seperti gambar di bawah:

Penggunaan fungsi THROWABLE pada PHP
Penggunaan fungsi THROWABLE pada PHP

Kita dapat menerapkan penangan error ini lebih dari menampilkan pesan error saja.

Kita dapat menentukan ketika terjadi error maka perintah apa yang akan dijalankan agar program yang kita buat berjalan sesuai kebutuhan.

Note: seharusnya hanya digunakan Pengecualian dengan kondisi kesalahan, dan tidak boleh digunakan untuk melompat ke tempat lain dalam kode pada titik tertentu.


Penggunaan dasar Pengecualian

Ketika eksepsi dilemparkan, kode berikut tidak akan dieksekusi, dan PHP akan mencoba untuk menemukan pencocokan "catch" blok.

Jika eksepsi tidak tertangkap, kesalahan fatal akan diterbitkan dengan "Uncaught Exception" pesan.

Mari kita mencoba untuk melemparkan pengecualian tanpa penangkapan itu:

<?php
//create function with an exception
function checkNum($number) {
  if($number>1) {
    throw new Exception("Value must be 1 or below");
  }
  return true;
}

//trigger exception
checkNum(2);
?>

Kode di atas akan mendapatkan error seperti ini:

Fatal error : Uncaught exception 'Exception'
with message 'Value must be 1 or below' in C:\webfolder\test.php:6
Stack trace: #0 C:\webfolder\test.php(12):
checkNum(28) #1 {main} thrown in C:\webfolder\test.php on line 6

Coba, melempar dan menangkap

Untuk menghindari kesalahan dari contoh di atas, kita perlu membuat kode yang tepat untuk menangani pengecualian.

kode pengecualian yang tepat harus mencakup:

  1. Cobalah - Sebuah fungsi menggunakan pengecualian harus berada dalam "try" blok. Jika pengecualian tidak memicu, kode akan berlanjut seperti biasa. Namun jika pengecualian memicu, eksepsi "thrown"
  2. Membuang - Ini adalah bagaimana Anda memicu pengecualian. Setiap "throw" harus memiliki setidaknya satu "catch"
  3. Menangkap - Sebuah "catch" blok mengambil pengecualian dan menciptakan sebuah objek yang berisi informasi pengecualian

Mari kita mencoba untuk memicu pengecualian dengan kode yang valid:

<?php
//create function with an exception
function checkNum($number) {
  if($number>1) {
    throw new Exception("Value must be 1 or below");
  }
  return true;
}

//trigger exception in a "try" block
try {
  checkNum(2);
  //If the exception is thrown, this text will not be shown
  echo 'If you see this, the number is 1 or below';
}

//catch exception
catch(Exception $e) {
  echo 'Message: ' .$e->getMessage();
}
?>

Kode di atas akan mendapatkan error seperti ini:

Message: Value must be 1 or below

Contoh menjelaskan:

Kode di atas melempar pengecualian dan menangkap itu:

  1. The checkNum() function dibuat. Ia memeriksa jika nomor lebih besar dari 1. Jika ya, eksepsi dilemparkan
  2. The checkNum() fungsi disebut dalam "try" block
  3. Pengecualian dalam checkNum() function dilemparkan
  4. The "catch" blok mengambil pengecualian dan menciptakan obyek ($e) yang berisi informasi pengecualian
  5. Pesan kesalahan dari pengecualian bergema dengan memanggil $e-> getMessage() dari objek pengecualian

Namun, salah satu cara untuk berkeliling "every throw must have a catch" aturan adalah untuk menetapkan tingkat atas pengecualian handler untuk menangani kesalahan yang lolos.


Membuat Kelas Exception Kustom

Untuk membuat pengecualian kustom handler Anda harus membuat kelas khusus dengan fungsi yang dapat dipanggil ketika pengecualian terjadi di PHP. kelas harus menjadi perpanjangan dari kelas pengecualian.

Kelas pengecualian kustom mewarisi sifat dari kelas pengecualian PHP dan Anda dapat menambahkan fungsi kustom untuk itu.

Mari kita membuat kelas pengecualian:

<?php
class customException extends Exception {
  public function errorMessage() {
    //error message
    $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 {
  //check if
  if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE) {
    //throw exception if email is not valid
    throw new customException($email);
  }
}

catch (customException $e) {
  //display custom message
  echo $e->errorMessage();
}
?>

Kelas baru adalah salinan dari kelas pengecualian tua dengan penambahan errorMessage() fungsi. Karena itu adalah salinan dari kelas lama, dan itu mewarisi properti dan metode dari kelas lama, kita dapat menggunakan metode kelas pengecualian seperti getLine() dan getFile() dan getMessage() .

Contoh menjelaskan:

Kode di atas melempar pengecualian dan menangkap itu dengan kelas pengecualian kustom:

  1. The customException() kelas dibuat sebagai perpanjangan dari kelas pengecualian tua. cara ini mewarisi semua metode dan properti dari kelas pengecualian tua
  2. The errorMessage() function dibuat. Fungsi ini mengembalikan pesan kesalahan jika alamat e-mail tidak valid
  3. Variabel $ email diatur ke string yang bukan alamat email yang valid
  4. The "try" blok dijalankan dan pengecualian dilemparkan karena alamat e-mail tidak valid
  5. The "catch" blok menangkap pengecualian dan menampilkan pesan kesalahan

beberapa pengecualian

Hal ini dimungkinkan untuk script untuk menggunakan beberapa pengecualian untuk memeriksa beberapa kondisi.

Hal ini dimungkinkan untuk menggunakan beberapa blok if..else, switch, atau sarang beberapa pengecualian. pengecualian ini dapat menggunakan kelas eksepsi yang berbeda dan kembali pesan kesalahan yang berbeda:

<?php
class customException extends Exception {
  public function errorMessage() {
    //error message
    $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 {
  //check if
  if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE) {
    //throw exception if email is not valid
    throw new customException($email);
  }
  //check for "example" in mail address
  if(strpos($email, "example") !== FALSE) {
    throw new Exception("$email is an example e-mail");
  }
}

catch (customException $e) {
  echo $e->errorMessage();
}

catch(Exception $e) {
  echo $e->getMessage();
}
?>

Contoh menjelaskan:

Kode di atas tes dua kondisi dan melempar pengecualian jika salah satu kondisi tidak terpenuhi:

  1. The customException() kelas dibuat sebagai perpanjangan dari kelas pengecualian tua. cara ini mewarisi semua metode dan properti dari kelas pengecualian tua
  2. The errorMessage() function dibuat. Fungsi ini mengembalikan pesan kesalahan jika alamat e-mail tidak valid
  3. Variabel $ email diatur ke string yang merupakan alamat email yang valid, tetapi berisi string "example"
  4. The "try" blok dijalankan dan eksepsi tidak dilempar pada kondisi pertama
  5. Kondisi kedua memicu pengecualian sejak e-mail berisi string "example"
  6. The "catch" blok menangkap pengecualian dan menampilkan pesan kesalahan yang benar

Jika pengecualian dilemparkan adalah dari customException kelas dan tidak ada customException menangkap, hanya dasar pengecualian menangkap, pengecualian akan ditangani di sana.


Re-melempar Pengecualian

Kadang-kadang, ketika eksepsi dilemparkan, Anda mungkin ingin menanganinya berbeda dari cara standar. Hal ini dimungkinkan untuk melemparkan pengecualian untuk kedua kalinya dalam "catch" blok.

Sebuah script harus menyembunyikan kesalahan sistem dari pengguna. kesalahan sistem mungkin penting untuk coder, tetapi tidak menarik bagi pengguna. Untuk membuat segalanya lebih mudah bagi pengguna Anda dapat kembali melempar pengecualian dengan pesan user friendly:

Apa yang dimaksud dengan throwable?

Senjata jenis ini adalah sebuah senjata yang kamu gunakan dengan cara melemparnya ke arah atau target yang kamu mau. Throwable weapon lebih akrab dikenal dengan granat PUBG dan satu unitnya hanya bisa digunakan sekali. Ada empat jenis throwable weapon atau granat PUBG yang memiliki fungsinya masing-masing.

Apa itu Exception pada PHP?

Exception secara bahasa berarti pengecualian. Sedangkan secara istilah di dalam PHP, ia adalah sebuah perubahan alur program dari kondisi normal ke kondisi tertentu (atau pengecualian tertentu) jika terjadi suatu error (exception).