Php Dersleri : Karar Kontrol Mekanizması

advertisement
Karar Kontrol Mekanizması
Karar Kontrol Mekanizması
Php 5 ile gelen yeniliklerin başında hata kontrol mekanizmasında yapılan
yenilik gelmektedir. Php 4'te tüm olasılıklar mantıksal denetlemelerle
yapılırken php 5'te ise tıpkı java'da olduğu gibi "try" yapısı kullanılarak, bir
nevi java'yla entegrasyona gidilmekte olduğu görülüyor. Her ne kadar
anlaşılması çok kolay bir yöntem olsa da, bu yöntem biraz amatör olarak
değerlendirilebilir. İşte bu mantıktan yola çıkan php geliştiriciler grubu, php
dilini nesne tabanlı bir dile çevirmek için çaba sarf ettiler. Aldığımız
duyumlara göre java’nın web teknolojisinde tıpkı microsoft’un asp’sinde
olduğu gibi jsp’de de artık farklı diller kullanabileceğiz. En azından bunun
üzerinde çalışan firmalar işin sonunu getirebilirlerse java’nın altyapısından
yararlanarak jsp içerisinde php, perl, python gibi dilleri kullanabileceğiz
Karar Kontrol Mekanizması
try{
//Karar kontrolü
}
catch ( Hata olgusu ){
//Hata olduğu takdirde yapılacak işlem
}
Basit olarak PHP 5 ile gelen hata kontrol mekanizması yukarıdaki gibidir. Bu mekanizma her ne kadar Java programlama diline
benzese de, Java ile aynıdır demek Java programlama diline büyük haksızlık olur. Zira Java’nın içerisinde gelen büyük Java
kütüphanesi PHP ile birlikte gelmiyor. Onun için PHP 5 ile Java’yı kıyaslamak büyük bir yanılgı olur.
Yukarıda verdiğimiz karar kontrol mekanizmasında, işlemin nerede yapılacağı ve işlem hatalı çıkması durumunda nelerin
yapılacağını belirten “catch” mekanizmasının çalışma mantığını kavramanız için basit bir örnek vererek konumuzu somutlaştıralım.
<?php
$sayi = 10.1;
try
{
if (! is_int($sayi) )
throw new Exception("Sayı Değil");
}
catch (Exception $e)
{
die("{$e->getMessage()}");
dersmax.net
Karar Kontrol Mekanizması
1
Karar Kontrol Mekanizması
}
echo "$sayi değişkeni sayıdır";
?>
Yukarıdaki kodu incelersek, burada oluşturduğumuz değişkene bir değer atayıp, bu değerin sayı değeri olup olmadığını bir
mantıksal denetleme ile kontrol ediyoruz. Mantıksal denetlemede sayı değeri olmaması durumunda işlem yapmak için (!) ünlem
işareti koyuyoruz. Belirtilen işlemin true yani doğru olarak dönmesi durumunda verilecek hata raporunu belirlemek için de “throw
new Exception” kalıbını kullanıyoruz. Hata işlemi yapıldığında oluşacak pozisyonu belirlemek için catch bölümünde Exception
kalıbını kullanarak, oluşan hatayı bu kalıbın önünde oluşturacağımız değişkene atıyoruz. Süslü parantezler içinde de oluşan bu
hatanın ne olduğunu yazdırıyoruz. Tanımladığımız $sayi değişkenine tam sayı değeri vermediğimiz için, mantıksal denetleme doğal
olarak Exception, yani oluşabilecek hata durumunda yapılacak işlemler bölümünde tanımladığımız hata metnini
"{$e->getMessage()}" deyimi ile ekrana yazdırıyor..
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.
Hata Kodu
Açıklaması
getMessage()
Exception bölümünde tanımlanan hata mesajını verir
getCode()
Hata kodu
getFile()
Hatanın oluştuğu dosyanın diziniyle birlikte adı
getLine()
Hata numarası
toString()
Tüm hata kodlaması
Burada verdiğimiz karar kontrol mekanizmasını çalıştırırsak karşımıza “Sayı Değil” cümlesi gelecektir. Peki bu karar kontrol
mekanizmasının sonunda yazdığımız echo satırına ne oldu? Deneyimli programcılar anlayacaktır; PHP herhangi bir hatayla
karşılaştığı durumda dosyanın okunmasını durdurarak, alt kısmı göz ardı etmekte. Bir nevi exit kullanmış gibi PHP okumayı
kesmekte. Bu özelik if mantıksal denetlemesinde yoktu. Yukarıdaki örneği biraz değiştirelim:
$sayi = 10.1;
if (!is_int($sayi)) {
echo "Bu bir sayıdır";
}
else {
echo "Bu bir sayı değildir";
}
echo "Bağımsız metin";
Yukarıdaki komut yapısını çalıştırdığımızda her halükarda mantıksal denetlemenin sonundaki echo komutu çalışacaktır. Bu ayrımı
dersmax.net
Karar Kontrol Mekanizması
2
Karar Kontrol Mekanizması
göz önüne alarak programlarınızı oluşturmanızda yarar var.
PHP 5 ile gelen karar kontrol mekanizmasını daha kararlı kullanmak için bir fonksiyon oluşturup, bu fonksiyonda hata düzeneğini bir
kerede tanımlayıp, istediğimizde bu fonksiyonu çağırarak işlemlerimizde kullanabiliriz.
<?php
function hata($e)
{
return "Dosya adı : {$e->getFile()} <br>
Hata numarası : {$e->getLine()} <br>
Hata mesajı : {$e->getMessage()} <br>
Hata kodu : {$e->getCode()}";
}
$sayi = 10.1;
try
{
if (! is_int($sayi) )
throw new Exception("Sayı Değil");
}
catch (Exception $e)
{
die(hata($e));
}
?>
Yukarıda tek yaptığımız muhtemel hataların neler olacağını belirlemek için tanımladığımız fonksiyon içerisine yerleştirmekten
ibaret. Fonksiyonu çağırmak için, catch özelliğinin süslü parantezleri içerisine yerleştirip, Exception alanında tanımladığımız hata
içeriğini toplayan değişkeni de bu fonksiyonun parantezleri içerisine koyarak, hata özelliklerini fonksiyonun içerisine gönderiyoruz.
Böylece oluşan hataları fonksiyonda tanımladığımız motoru devreye sokarak, oluşan hata argümanlarını listeleyerek
oluşturduğumuz kodda nerede hata olduğunu kolayca tespit ediyoruz.
Görüldüğü gibi PHP 5 ile gelen karar kontrol mekanizması zannedildiği kadar zor bir işlem değil. Burada verdiğimiz bilgiler ışığında
hata kontrol mekanizmasının işleyişinin mantığını kavradıysanız, ilerleyen sayfalarda PHP 5’i kavrama babında zorlanmayacaksınız.
Zira PHP 5’i kavramanın ilk aşamasında karar kontrol mekanizması bulunmakta. Bu konuyu kavrayıp yeni nesne yönelimini de
öğrenirseniz özellikle veritabanı işlemlerinde artık nesne yönelimlerini kullanarak kod geliştirerek profesyonelliğe bir adım
atabilirsiniz.
Basit exception örneği
<?php
function inverse($x) {
if (!$x) {
throw new Exception('Sıfıra bölüm hatası.');
}
else return 1/$x;
}
dersmax.net
Karar Kontrol Mekanizması
3
Karar Kontrol Mekanizması
try {
echo inverse(5) . "<br/>";
echo inverse() . "<br/>";
} catch (Exception $e) {
echo 'Yakalanan Taşma: ', $e->getMessage(), "n";
}
?>
<?php
function SayiBolen($Sayi){
$Bolunmus=$Sayi-2;
if($Bolunmus<){
throw new Exception('Sayı sıfırdan küçük');
}
else {
echo "$Bolunmus<br/>";
SayiBolen($Bolunmus);
}
}
try {
SayiBolen(20);
}
catch (Exception $Problem){
echo 'Hata Mesajınız '.$Problem->getMessage();
}
?>
İç içe kullanılmış bir excepti
<?php
$Sayi=-2;
try {
if($Sayi>){
try{
if($Sayi<10){
echo "Sayi 0 dan büyük 10 dan küçük";
}
else {
throw new Exception();
}
}
catch(Exception $Problem){
echo "Sayi 10 dan büyük";
}
}
else {
throw new Exception();
dersmax.net
Karar Kontrol Mekanizması
4
Karar Kontrol Mekanizması
}
}
catch(Exception $Problem){
echo "Sayi sıfırdan küçük";
}
?>
Kaynak
edergi.linux.org.tr/
dersmax.net
Karar Kontrol Mekanizması
5
Download