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.
1 Şubat 2008 Cuma
Php 5 Yeni Hata Yakalama Sınıfı(Exception)-2
Etiketler: Exception, Hata Yakalama, İstisnalar, Php, Sınıf
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.
Etiketler: Exception, Hata Yakalama, İstisnalar, Php, Sınıf