31 Ocak 2008 Perşembe

Php 5 Yeni Hata Yakalama Sınıfı (Exception)

İstisnalar Php 5’te yeni bir özelliktir. İstisnalar hata yönetimini kolay, genişletilebilir, bakımı yapılabilir ve nesne yönelimli bir şekilde gerçekleştirilmesini mümkün kılan bir yönetimdir.

İstisnalar nasıl kullanılır?
Normalde kodlarımızdaki hataları genellikle if-else komutlarını kullanarak kontrol ediyorduk.Örneğin kullanıcı e-mail adresini girmediyse karşısına “Lütfen email adresinizi giriniz” şeklinde bir mesaj yolluyorduk. Bunu da genellikle formdan gelen verileri if-else kullanarak yapıyorduk. Php 5 geliştirilirken bunun üzerinde düşünmüşler ve biraz daha değişik bir yöntem belirlemişler.İşte biz bu makalemizde bunu inceleyeceğiz nasıl olur, nasıl kullanılır bakacağız.
İstisna Yöntemi
try
{
//Uygulamanızdaki kodlar buraya
}

Yukarıda gördüğünüz gibi uygulamanızdaki kodları try blogu içine yazarak istisna yöntemini kullanmaya başlayabilirsiniz. Bu blok arasına yazdığız kodlarda bir hata meydana gelirse, istisna fırlatma denilen işlemin uygulanmasını başlatılır.
İstisna Fırlatalım
throw new Wxception(‘Mesaj’,code);

throw anahtar sözcüğü ile istisna yönetimi mekanizmasını tetikleyebilirsiniz. Bu anahtar sözcük bir nesne almayı bekler.En basit durumda Php5 teki yerleşik Exception sınıfının bir örneğini oluşturabilirsiniz.

Bu sınıfa ait yapılandırıcı iki parametre alır, Bir mesaj ve bir kod.Bunlar bir hata mesajını ve bir hata kod numarasını temsil eder.

Try bloğunun altında bir tanede catch bloğu vardır. Buda fırlatılan istisnaların yakalanmasını sağlar.

catch ( typehint exception )
{
//İstisnayı yönet
}

Tek bir try bloğuyla ilişkilendirilen birden fazla catch bloğu olabilir. Fakat her bir catch bloğu farklı tipte bir istisna yakalayacaksa, birden fazla try blogu kullanmak daha mantıklıdır

Örneğin, eğer Exception sınıfının istisnalarını yakalamak isterseniz catch bloğunuz şu şekle olabilir.
catch (Exception $e)
{
//İstisnayı yönet
}

catch bloğuna geçirilen (ve bu blok tarafından yakalanan) nesne, istisnayı gönderen throw ifadesine geçirilen (ve bu deyim tarafından fırlatılan) nesnedir. İstisna herhangi bir tipte olabilir, ama Exception sınıfının örneklerini ya da kendi kullanıcı tanımlı istisnalarınızın örneklerini(özelliklerini Exception sınıfından kalıtım yoluyla alan örnekler) kullanmanız iyi olur.

Bir istisna fırlatıldığında, php bununla eşleşen bir catch bloğu arar. Eğer birden fazla catch bloğu kullanıyorsanız, bunların her birine geçirilen nesneler farklı tiplerde olacak ve böylece php hangi catch bloğunun kullanılması gerektiğini anlar.Ayrıca bir catch bloğu içindede istisnalar fırlatabilirsiniz.

Exception Sınıfının Metotları

getCode() -> Kodu yapılandırıcıya geçirildiği şekliyle döndürür.
getMessage() -> Mesajı yapılandırıcıya geçirildiği şekliyle döndürür.
getFile() -> İstisnanın fırlatıldığı kod dosyasına giden tam yolu döndürür.
getTrace() -> İstisnanın fırlatıldığı backtrace’i içeren bir dizi döndürür.
getTraceAsString() -> getTrace ile aynı bilgileri karakter katarı olarak döndürür.
__toString() -> Yukarıdaki metotlardan alınan bütün bilgileri veren bir exception nesnesinin özelliklerini yansıtmanızı sağlar.Mesajınızın şeklini şemalini düzeltmenize yarar.

(*backtrace : İstisna fırlatıldığı zaman hangi fonksiyonların çalışmakta olduğunu gösterir.)

Aşağıda formdan gelen kullanici adi ve şifreyi denetleyen istisna yöntemi kullanılmış bir kod var incelemenizde fayda var.

try
{

$kullanici_adi=$_POST['kullanici_adi'];
$sifre =$_POST['sifre'];

if($kullanici_adi !== "kullanıcıadim" and $sifre !== "sifrem")
{
throw new Exception("Lütfen yönetici adinizi ve parolanizi dogru giriniz.");
exit();
}
}
catch(Exception $e)
{
echo $e->getMessage();
}

?>

Not: Bir dahaki yazımızda kendi exception sınıfımızı oluşturmaya çalışacağız.

Hiç yorum yok: