İstisna Yönetimi

Exception(İstisna Yönetimi) Nedir?

PHP 5 ile beraber gelen nesneye yönelik programlama çatısıyla istisna yönetimide gelmiş oldu.

Hata durumda kod akışını durdurmak ve mevcut bu durumu kayıt etmek için exception u kullanırız.

Yapılan işlemler:
Kod durumu kayıt edilir.
Hata durumda önceden belirlenmiş olan işlem yapılır.
Hata çözüm mekanizması yapılmışsa hata çözümü yapılıp geri dönülür,durdurulur Ya da devam edilir.

Hata ayıklama yöntemleri:

Basit seviye istisna kullanımı
Özel istisna ayıklıcı tasarlanması
Çoklu istisna sınıfları
Tekrarlı istisna kullanımı
Yüksek seviye istisna kullanımı

İstisna Kuralları:
İstisnalar yakalanabilirligini arttırmak için try bloguna alınır.
Try ve throw ların mutlaka catch blogu ile baglantılı olmalı
Catchların fazla olması birden fazla istisnayı yakalanması için kullanılır.

Basit istisna

Bu istisna yöntemi tetiklendiginde devamındaki kodlar çalışmaz. Catch deki throwu işler. Fatal eror yani ölümcül hata verir.

Örnek kod:

<?php
//istisna fonksiyonu tanımlayalım
function nokontrol($no)
{
if($no>1)
{
throw new Exception(“Değer 1 veya birden az olmalı”);
}
return true;
}
//istisnayı tetikle
nokontrol(2);
?>

Throw ve catch İfadeleri

Basit istisna yönetimi yerine gelişmiş bir istisna yönetimi bize dahada kolaylık verir.

İstisna yönetimin içinde olması gereken kısımlar:

Try: İstisnalar try blogunda bulunur. İstisna tetiklenirse çalışır.
Throw : İstisnaların tetiklendigi bloktur. Her throw un bir catch ifadesi olmak zorunda
Catch : İstisnanın bulundugunda çalıştırılacak komuttur.

<?php
//istisna fonksiyonu oluşturalım
function nokontrol($no)
{
if($no>1)
{
throw new Exception(“Değer 1 veya daha az olmalıdır.”);
}
return true;
}
// “try” bloğunda istisnayı tetikleyelim
try
{
nokontrol(2);
//istisna fırlatıldığında,bu kod çalışmayacaktır.
echo “Bunu görüyorsanız,değer 1 den kucuk demektir”;
}
//İstisna yakala
catch(Exception $n)
{
echo ‘Uyarı mesajı: ‘ .$n->getMessage();
}
?>

Aşağıdaki gibi mesaj verir:
Uyarı Mesajı : Değer 1 veya daha az olmalıdır.

  1. nokontrol() fonksiyonu oluşturuldu Fonksiyon değerin 1 den büyük yada küçük olduğunu denetler.Ve istisna fırlatılır.
  2. nokontrol() fonksiyonu try bloğunda çağırdık
  3. nokontrol() daki istisna gönderildi
  4. “catch” bloğu istisnayı ele alıyor ve istisna bilgilerini içeren $n nesnesini yaratıldı.
  5. İstisna nesnesi tarafından getMessage() fonksiyonu ile hata mesajı gösterilir

Custom Exception İstisna Sınıfını Oluşturmak

Özel istisna sınıfı oluşturmak için kullanırız.

<?php
class customException extends Exception
{
public function errorMessage()
{
//Hata mesajı
$hatamesaji = ‘Hata ‘.$this->getLine().’ in ‘.$this->getFile()
.’: <b>’.$this->getMessage().’</b>geçersiz e-mail adresi’;
return $hatamesaji;
}
}
$email = “nurettin@tasarimrehberi.com”;
try
{
//denetle
if(filter_var($email, FILTER_VALIDATE_EMAIL) == FALSE)
{
//email adresi geçersiz ise istisna fırlat
throw new customException($email);
}
}
catch (customException $n)
{
//özel mesajı yayınla
echo $n->errorMessage();
}
?>

Çoklu istisnalar

Birden fazla istisnaları yönetmek ve uygulamak için kullanılır.
Switch ,if,else komutları kullanarak çoklu istina uygulanır.

<?php
class customException extends Exception
{
public function hataMesaji()
{
//hata mesajı
$errorMsg = 'Error on line '.$this->getLine().’ in '.$this->getFile().’: <b>’.$this->getMessage().’</b> geçersiz e-mail adresi’;
return $errorMsg;
}
}
$email = "nurettin@tasarimrehberi.com";
try
{
//denetle
if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE)
{
// email adresi yanlış ise istisna gönder
throw new customException($email);
}
if(strpos($email, “example") !== FALSE)
{
throw new Exception(“$email örnek bir mail adresidir");
}
}
catch (customException $n)
{
echo $n->hataMesaji();
}
catch(Exception $n)
{
echo $n->getMessage();
}
?>

Kodun yaptıgı işlemler:
customException() sınıfı PHP Exception sınıfndan işlem yapar. Exception sınıfının bütün metotlarını ve özelliklerini kullanabiliyor.
HataMesaji() sayesinde hata oluştugu takdirde mail adrese rapor olarak gidecek.
$email degişkenin içinde ahmetinsitesi kelimesi geciyormu diye bakar geçermezse istisna başlar
Try blogu başka try blogunu denetliyor. Yani tekrar istisnayı tetikliyor.
Catch istisnayı yakalar ve custom exceptiona gönderir.
Custom exception hatayı yayınlar
Üst seviye istisna yöneticisi

set_error_handler() fonksiyonu yardımıyla yapılan istisna yönetimidir.

Örnek:

<?php
function myException($exception)
{
echo “<b>Exception:</b> ” , $exception->getMessage();
}
set_exception_handler(‘myException’);
throw new Exception(‘Bilinmeyen İstisna oluştu');
?>

set_error_handler() Nedir?

Eğer programcı hatayı tanımlamamışsa E_ERROR gibi sistemi durdurur.

Twitter Digg Delicious Stumbleupon Technorati Facebook
Yazar :

PHP Programcısı

http://www.tasarimrehberi.com

Henüz Yorum yazılmamış... İlk Yorumu siz yazabilirsiniz!