Monday, October 10, 2016



Exeption, Dimana dan kapan menggunakan exception?
Exception adalah peringatan akan suatu hal atau error tentang jalannya program saat RUNTIME.
PHP mengimplementasikan ini dalam bentuk:

pertama: dokumentasi jenis error
kedua: kelas yang menangan seluruh exception dalam engine PHP

Exception digunakan dalam cara dua hal:

pertama: kita telah dapat memperkirakan setiap kemungkinan error yang bakal terjadi, berbekal set pesan error yang kita ketahui yang mungkin dikeluarkan oleh engine PHP, menyangkut error saat runtime. lalu berbekal itu kita menyiapkan perangkap2 pesan atau error.

kedua: saat fase pengembangan dan uji coba kita menemukan sejumlah error yang dikeluarkan oleh engine php, kita mencatat semua error itu dan menyiapkan perangkap2 exception.

Exception dibuat secara terstruktur pada blok-blok kode (blok kode diantara kurung kurawal {}), idealnya untuk setiap blok kode dipersiapkan perangkap exception, yang juga berarti untuk setiap fungsi yang dibuat, dibuatkan perangkap exception.

--------------------------------------------------------------------------------------------------------------------------exception handling = proses penanganan terhadap exception yang timbul.

Mekanisme ini meliputi: saving terhadap state kode yang sedang berjalan.eksekusi kode teralihkan ke fungsi yang diberi tugas menangani exception biasanya berupa blok kode atau handler function, atau disebut saja handler secara umum. 

Mekanisme (Skenario) keseluruhan terjadinya exception:aliran kode pada suatu titik menemui error pada mesin komputer, lalu engine php diatasnya melemparkan pesan sebagai pemberitahuan, blok kode untuk handling exception yang telah disiapkan akan mencoba menangkap pesan tersebut, dan mencari kecocokan dengan daftar exception yang telah dipetakan atau dilist sebelumnya oleh engine php, jika terdapat kecocokan maka exception dinamakan tertangkap (caught) dan proses selanjutnya ditangani oleh blok kode handling exception, tetapi sebaliknya jika tak terdapatkecocokan dengan daftar exception, maka terjadi yang diistilahkan sebagai FATAL ERROR (error yang tidak diketahui penyebabnya), atau dinamakan juga sebagai uncaught exception. tetapi bisa saja jenis error ini diketahui oleh programmer karena mungkin dirancang olehnya tetapi tidak terdaftar pada list exception yang diketahui engine php.

#Apakah kegunaan lain/sampingan dari handling exception?

Pertama = dapat kita gunakan untuk menciptakan error pada program, suatu jenis error yang mungkin tidak terdaftar dalam list exception engine php. tetapi kita dapat juga membuat pesan error sekaligus handling function untuknya dengan lengkap
contoh:(sumber contoh kode: http://www.w3schools.com/php/php_exception.asp diakses tgl 6 mei 2013)

1) { throw new Exception("Value must be 1 or below"); } return true; }
//trigger exceptioncheckNum(2);?>The code above will get an error like this:

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

Kedua = kita dapat menggunakan untuk mengalihkan aliran kode sesuka kita dengan membuat exception handling yang membelokkan ke aliran kode tertentu, sambil juga mungkin memberi pesan jika kita inginkan.
--------------------------------------------------------------------------------------------------------------------------

Contoh Konstruksi Fungsi yang dibenamkan kode exception di dalamnya, dan bagaimana cara menjalankan fungsi yang memiliki kode exception.

Fungsi yang memiliki kode xception di dalamnya dijalankan dalam paradigma Try, throw and catch.
(sumber contoh kode: http://www.w3schools.com/php/php_exception.asp diakses tgl 6 mei 2013)

1) { throw new Exception("Value must be 1 or below"); } return true; }

//trigger exception in a "try" blocktry { 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 exceptioncatch(Exception $e) { echo 'Message: ' .$e->getMessage(); }?>The code above will get an error like this:

Message: Value must be 1 or below
--------------------------------------------------------------------------------------------------------------------------

#Bagaimana cara membuat class exception sendiri selain dari class built-in php (class Exception)?
Prinsipnya sederhana saja, yaitu buat class yang mana class itu diturunkan dari class Exception.
(sumber contoh kode: http://www.w3schools.com/php/php_exception.asp diakses tgl 6 mei 2013)

getLine().' in '.$this->getFile() .': '.$this->getMessage().' is not a valid E-Mail address'; return $errorMsg; } }
$email = "someone@example...com";
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(); }?>
--------------------------------------------------------------------------------------------------------------------------

#Bagaimana sebenarnya prinsip dasar penggunaan Exception?

Pertama: exception yang dibuat oleh engine php secara bawaan.untuk menggunakan class exception guna mengahndle exception adalah cukup letakkan blok kode yang diperkirakan memunculkan/memicu/meng-throw exception pada TRY-CATCH.

contoh:
try { Blok Kode yang diperkirakan bakal melemparkan exception }
catch (Exception $e) { echo "Message:".$e->getMessage(); }

atau lebih umum lagi:
contoh:

try {Blok Kode yang diperkirakan bakal melemparkan exception (blok kode bisa berupa fungsi atau set fungsi) }

catch (Exception $e) { Blok Kode yang menangani jenis exception (blok kode bisa berupa fungsi atau set fungsi). }

atau lebih umum lagi:
contoh:

try { Blok Kode yang diperkirakan bakal melemparkan exception (blok kode bisa berupa fungsi atau set fungsi) }

catch (Kelas_Turunan_Exception $e) { Blok Kode yang menangani jenis exception (blok kode bisa berupa fungsi atau set fungsi). }

Kedua: exception yang kita buat sendiri untuk tujuan tertentu (membuat error sendiri atau mengalihkan aliran kode)

Prinsip penggunaan exception adalah: Try Throw Catch.
Contoh:

try { Blok Kode yang didalamnya kita melakukan throw exception sendiri yaitu "throw new Exception(....) atau throw new KelasTurunanException(.......)" (blok kode bisa berupa fungsi atau set fungsi, dimana throw exception bisa ditulis di dalam fungsi atau bisa juga ditulis diluar fungsi tetapi dalam satu blok kode) }

catch (Exception $e atau Kelas_turunan_Exception $e) { Blok Kode yang menangani jenis exception (blok kode bisa berupa fungsi atau set fungsi). }
--------------------------------------------------------------------------------------------------------------------------

#Penggunaan Exception dapat digeneralisir lebih jauh dalam konsep multi exception:
yaitu:Try Multi-Catch dan Try Multi-Throw Multi-Catch

atau lebih umum lagi dengan multi class turunan:Try Multi-Throw-By-Class_anak_berbeda Multi-Catch-sesuai-class

contoh:(sumber contoh kode: http://www.w3schools.com/php/php_exception.asp diakses tgl 6 mei 2013)

getLine().' in '.$this->getFile().': '.$this->getMessage().' is not a valid E-Mail address';return $errorMsg;}}
$email = "someone@example.com";
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(); }?>
--------------------------------------------------------------------------------------------------------------------------

#Pembuatan Excepetion dapat diperluas lagi dengan cara sebagai berikut:

Try {Blok Kode A (didalamnya terdapat throw atau tidak)} catch {Blok Kode B}
dimana Blok kode A juga di dalamnya ditanam Try-Catch exception, dan seterusnya bisa secara berantai, atau juga di dalam Blok Kode B tertanam Try-Catch exception yang juga mungkin berantai kedalam samapi kedalaman tertentu.Kita namakan itu sebagai nested try-catch.

Lebih luas lagi nested try-catch dapat diterapkan pada multi exception.

Contoh:(sumber contoh kode: http://www.w3schools.com/php/php_exception.asp diakses tgl 6 mei 2013)

phpclass customException extends Exception { public function errorMessage() { //error message $errorMsg = $this->getMessage().' is not a valid E-Mail address.'; return $errorMsg; } }
$email = "someone@example.com";
try { try { //check for "example" in mail address if(strpos($email, "example") !== FALSE) { //throw exception if email is not valid throw new Exception($email); } } catch(Exception $e) { //re-throw exception throw new customException($email); } }
catch (customException $e) { //display custom message echo $e->errorMessage(); }?>
--------------------------------------------------------------------------------------------------------------------------

#Anatomi Class Exception (sumber manual PHP versi english):
class Exception{
protected $message = 'Unknown exception'; // exception message
private $string; // __toString cache
protected $code = 0; // user defined exception code
protected $file; // source filename of exception
protected $line; // source line of exception
private $trace; // backtrace
private $previous; // previous exception if nested exception
public function __construct($message = null, $code = 0, Exception $previous = null);
final private function __clone(); // Inhibits cloning of exceptions.
final public function getMessage(); // mendapatkan pesan exception
final public function getCode(); // mendapatkan kode exception
final public function getFile(); // mendapatkan nama file sumber exception
final public function getLine(); // mendapatkan nomor baris kode sumber exception pada file script final public function getTrace(); // mendapatkan array dari backtrace()
final public function getPrevious(); // exception sebelumnya
final public function getTraceAsString(); // string terformat dari penjejakan exception (trace)

/* Overrideable (dapat dioveride) */ 

public function __toString(); // string terformat untuk ditampilkan}?>

Cara sederhana penggunaan class ini adalah:buat objek exception lalu throw atau langsung throw bersamaan dengan membuat kelasnya, dan isi parameter-parameter constructornya.

yaitu sebagai berikut:

throw new Exception($message,$code,$previous).

setelah itu tangkap dan gunakan objeknya untuk menampilkan informasi2 error.

contoh: misal $e adalah objeknya, maka $e->getMessage() memberikan pesan errornya, $e->getCode() memberikan kode errornya, dan seterusnya, dapat dimanfaatkan untuk tujuan-tujuan manipulasi kode dan aliran kode.

Secara persis penggunaanya kita letakkan dalam TRY CATCH atau TRY THROW CATCH seperti penjelasan di atas.

sumber : note aslan alwi

1 comments :

This comment has been removed by a blog administrator.