1 Şubat 2008 Cuma

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

Yerleşik Exception sınıfı ve üzerine inşa ettiğimiz yeni sınıf

Php ile gelen yerleşik exception sınıfı
(Bu kod http://www.php.net/ adresinden alınmıştır.)

class Exception
{
protected $message = 'Unknown exception';
protected $code = 0;
protected $file;
protected $line;

function __construct($message = null, $code = 0);
final function getMessage();
final function getCode();
final function getFile();
final function getLine();
final function getTrace();
final function getTraceAsString();
function __toString();
}
?>

Gördüğünüz gibi daha önceki yazımızda söylediğimiz metotları içeren bir sınıf.Burda en çok dikkat çeken şey __toString() metodu hariç diğer metotların başına final anahtar sözcüğü gelmiş bu anahtar sözcük bu metotların hiç bir şekilde başka sınıflar tarafından kullanılamıyacağını üzerinde bir düzenleme yapılamayacağını gösterir. Yani bu metotlar kalıtım yoluyla başka alt sınıflara devredilemez.

(final anahtar kelimesini kendi sınıflarınızın hangi elemanının alt sınıflar tarafından erişilmesini engellemek istiyosanız kullanabilirsiniz,bu anahtar kelimeyi sınıflarınızın başına koyarakta yazdığınız sınıfın başka bir alt sınıfta kullanılmasını engelleyebilirsiniz.)

__toString metodu ise final anahtar kelimesini içermediği için alt sınıflar tarafından erişilebilir ve düzenlenebilir.Bununla ilgili hemen bir örnek yapalım;

class benimsinifim extends Exception
{
function __toString()
{
return 'buraya bir link yazabilirsiniz veya istediğiniz bir Html koduda olabilir';
Bildirmek için tıklayınız';
}
}
try
{
throw new benimsinifim("Hata!!!");
}
catch(benimsinifim $m)
{
echo $m->getMessage();
echo $m;
}
?>
Bu yaptığımız sınıfla __toString metoduna erişip onu Exception sınıfında devre dışı bırakıyoruz ve benimsinifim sınıfında yeniden oluşturuyoruz ve Geri bildirim yapmak için bir link sunuyoruz.

Kendi exception sınıfınızı tanımlamak için genellikle php’de yerleşik olan exception sınıfının üzerine inşa ettiğiniz sınıfları kullanırsanız özellikle başlangıç aşamasında size daha faydalı kodlar yazmanızda yardımcı olur.

Şimdi yerleşik exception sınıfının metotlarını daha yakından inceleyelim;

getMessage()

Daha önce verdiğimiz örneklerdende anlaşılacağı üzere;

throw new Exception(‘Hata mesajımız’);

şeklinde fırlattığımız hata mesajını yakalayıp(catch blogu içinde) ekrana basılmasını sağlamamıza yarar.

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

getCode()

Bu özellikte hata mesajımıza bir hata kodu vermemize yarar.

throw new Exception (‘Hata mesajımız’,1);

Burada da hata mesajımızdan sonra fırlatılacak hata mesajının yanında fırlatılacak hata kodunu gireriz. Ve bunu catch blogu içinde kullanırız.

catch(Exception $m)
{
echo $m->getMessage()
}

getFile()

Bu metot da hatanın olduğu dosyanın tam adresini döndürür. Yine aynı şekilde kullanılır.

getTrace()

Bu metotda hata verilen sayfayı ve hata sırasında hangi fonksiyonların çalıştığını size dizi halinde verir.

function a()
{
throw new benimsinifim("Hata!!!");
}
try
{

a();
}

catch(benimsinifim $m)
{
print_r( $m->getTrace());
}

Şeklinde bir kodunuz varsa bu metot sayesinde size şöyle bir çıktı verilecektir.
Array ( [0] =>
Array ( [file] => C:\wamp\www\projects\trying\nesneyonelik\hatayakalamasinifi.php
[line] => 22
[function] => a
[args] => Array ( ) ) )

getTraceAsString()

Bu metotda getTrace() metoduyla aynı bilgileri bir karakter katarı olarak verir.

catch(benimsinifim $m)
{
echo $m->getTraceAsString();
}

Çıktısıda şu şekilde olur.
#0 C:\wamp\www\projects\trying\nesneyonelik\hatayakalamasinifi.php(22): a() #1 {main}

__toString()

Bu metodu yukarıda açıklamıştık ve kullanımınıda göstermiştik şu şekilde de kullanabilirsiniz.

catch(benimsinifim $m)
{
echo $m->getTraceAsString();
echo $m->__toString();
}
Size yine aynı sonucu vericektir.