Excepiton

Exception türkçe anlamı istisna olan kelimedir. İstisnalar php'de hata yönetimini kolay, genişletilebilir, bakımı yapılabilir ve nesne yönelimli bir şekilde gerçekleştirilmesini sağlar
PHP 5 de başka dillerdeki gibi başkalık (exception) modeli vardır.

         Bir başkalık atılır ya da yakalanır.

         Her denemenin karşılığı olan en az bir yakalama bloğu vardır.    Birden çok yakalama bloğu değişik başkalık sınıflarını yakalamak için kullanılabilir. Normal çalışma (Başkalığın deneme bloğundan hiçbiri fırlatılmamışsa ya da fırlatılana uygun yakalama bloğu yoksa) çalışmaya sıralamadaki son yakalama bloğunun peşinden devam eder. Başkalıklar bir yakalama bloğunda fırlatılır (ya da yine fırlatılır).

Bir başkalık atıldıığında, o deyimi izleyen kod çalıştırılmaz ve PHP ilk uyumlu bloğu bulmaya çalışır. Eğer bir başkalık yakalamazsa, PHP kritik hatası "UncaughtExceptşon ..." üretilir. Eğer tutacı set_expection_handler() ile tanımlanmışsa bu olmaz.

Başkalığa fırlatma (atlama) örneği
 
<?php
 functioninverse($x) {
     if (!$x) {
     thrownewException('Sıfıra bölme.');
 }
else return 1/$x;
 }
try {
echoinverse(5) . "n";
 echoinverse(0) . "n";
}
catch (Exception $e) {
 echo 'Başkalık yakalandı: ', $e->getMessage(), "n";
}
// Çalışmaya devam
 echo 'Merhaba Dünya';
?>

Yukarıdaki örneğin çıktısı:

0.2 Başkalık yakalandı: Sıfıra bölme.

Merhaba Dünya

Başlığı Geliştirme:

Kullanıcı tanımlı başkalık sınıfı hazır - Başkalık sınıflarını arattırmakla tanımlarnır.

Hazır başkalık sınıfı örneği

<?php

class Exception
{
    protected $message = 'Belirsiz başkalık'; // başkalık mesajı
    protected $code = 0;             // kullanıcı tanımlı başkalık kodu
    protected $file;                 // başkalığın kaynak kodu
    protected $line;                 // başkalığın kaynak satırı

    function __construct($message = null, $code = 0);

    final function getMessage();     // başkalık mesajı
    final function getCode();        // başkalık kodu
    final function getFile();        // kaynak dosya adı
    final function getLine();        // kaynak satırı
    final function getTrace();       // backtrace() dizisi
    final function getTraceAsString();  // taramanın kalıplı yazı dizisi

    /* Overrideable */
    function __toString();           // görüntülemek için kalıplı yazı dizisi
}
?>
 

Eğer bir sınıf hazır-Başkalık sınıfını genişletirse ve yapıcıyı yeniden tanımlarsa, onun var olan tüm verileri doğru olarak atandığının bilinmesi için "parent::__construct()" çağırması önemle önerilir. nesne bir yazı dizisi gibi gösterildiğinde değiştirilmiş çıktı sağlamak için __toString() yöntemi atlanır.

  Başkalık sınıfını geliştirme

<?php
/**
 * Kullanıcı tanımlı başkalık sınıfı
 */

class MyException extends Exception
{
    // başkalığı yeniden tanımla öyle ki
    // mesaj seçimli olmasın
    public function __construct($message, $code = 0) {
        // bazı kodlar
        // herşeyin doğru atandığına emin olun
        parent::__construct($message, $code);
    }

    // nesnenin kullanıcı yazı dizisi gösterimi
    public function __toString() {
        return __CLASS__ . ": [{$this->code}]: {$this->message}n";
    }

    public function customFunction() {
        echo "Bu tür başkalık için kullanıcı işlevin";
    }
}


/**
 * Başkalığı denemek için bir sınıf yarat
 */

class TestException
{
    public $var;

    const THROW_NONE    = 0;
    const THROW_CUSTOM  = 1;
    const THROW_DEFAULT = 2;

    function __construct($avalue = self::THROW_NONE) {

        switch ($avalue) {
            case self::THROW_CUSTOM:
                // kullanıcı başkalığı fırlat
                throw new MyException('1 geçersiz parametredir', 5);
                break;

            case self::THROW_DEFAULT:
                // varsayılanı fırlat
                throw new Exception('2 parametre olarak geçersizdir', 6);
                break;

            default:
                // Başkalık yok, nesne yaratıldı
                $this->var = $avalue;
                break;
        }
    }
}


// Örnek 1
try {
    $o = new TestException(TestException::THROW_CUSTOM);
} catch (MyException $e) {      // yakalanır
    echo "Benim başkalığımı yakalaman", $e;
    $e->customFunction();
} catch (Exception $e) {        // Atlanır
    echo "Varsayılan Başkalığı Yakalan", $e;
}

// işleme devam
var_dump($o);
echo "nn";


// Örnek 2
try {
    $o = new TestException(TestException::THROW_DEFAULT);
} catch (MyException $e) {      // Bu tür uymadı
    echo "Benim başkalığımı yakalaman", $e;
    $e->customFunction();
} catch (Exception $e) {        // yakalanır
    echo "Varsayılan Başkalığı Yakalan", $e;
}

// işleme devam
var_dump($o);
echo "nn";


// Örnek 3
try {
    $o = new TestException(TestException::THROW_CUSTOM);
} catch (Exception $e) {        // yakalanır
    echo "Varsayılan Başkalığı Yakalan", $e;
}

// işleme devam
var_dump($o);
echo "nn";


// Örnek 4
try {
    $o = new TestException();
} catch (Exception $e) {        // atlandı, ibaşkalık yok
    echo "Varsayılan Başkalığı Yakalan", $e;
}

// işleme devam
var_dump($o);
echo "nn";
?>
 

Exception türkçe anlamı istisna olan kelimedir. İstisnalar PHP'de hata yönetimini kolay, genişletilebilir, bakımı yapılabilir ve nesne yönelimli bir şekilde gerçekleştirilmesini sağlar.

Basit bir örnekle anlatılması gerekirse;


<?php
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();
}

?>
 

Bu örnekte kullanıcı adı ve parola kontrolü yapılıyor. Girilen kullanıcı adında ve parolada hata olup olmadığı kontrol ediliyor.



İstisna tetiklendiği anda şu aşamalar gerçekleşir;

  • Varolan kod durumu kaydedilir.

  • Kod işletimi önceden tanımladan hata ayıklama bloğuna atlayacaktır.

  • Duruma göre , hata ayıklama sonunda , ya en son işletilen kod bloğuna yeniden dönerek devam edecek, yada hata ayıklama bloğunda belirtilen aşamadan devam edecektir.


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.

Kaynak : Burak Taş

Yorumunuzu Ekleyin


Yükleniyor...
Yükleniyor...