İstisnalar
PHP Manual

İstisnaları Genişletmek

Yerleşik Exception sınıfını genişleten kullanıcı tanımlı bir istisna sınıfı tanımlanabilir. Aşağıdaki üyeler ve özellikler, yerleşik Exception sınıfından türetilen alt sınıf içerisinde nelerin erişilebilir olduğunu göstermektedir.

Örnek 1 - Yerleşik Exception sınıfı

<?php
class Exception
{
    protected 
$message 'Bilinmeyen istisna';  // istisna iletisi
    
private   $string;                          // __toString önbelleği
    
protected $code 0;                     // kullanıcı tanımlı istisna kodu
    
protected $file;                         // istisnanın kaynak dosyası
    
protected $line;                  // istisnanın kaynak dosyasındaki satırı
    
private   $trace;                           // geriye doğru hata izleme
    
private   $previous;              // istisnalar iç içe ise önceki istisna



    
public function __construct($message null$code 0,
                                  
Exception $previous null);


    final private function 
__clone();           // İstisna kopyalamayı engeller
    
final public function getMessage();         // istisna iletisi
    
final public function getCode();            // istisnanın kodu
    
final public function getFile();            // kaynak dosya
    
final public function getLine();            // kaynak dosya satırı
    
final public function getTrace();           // backtrace() dizisi
    
final public function getTraceAsString();   // biçemli hata izleme dizgesi
    
final public  function getPrevious();       // önceki istisna

    // Geçersiz kılınabilir //
    
public function __toString();  // görüntüleme için biçemlenmiş dizge
}
?>

Bir sınıf yerleşik Exception sınıfını genişletiyor ve nesne kurucuyu yeniden tanımlıyorsa, mevcut tüm verinin düzgün biçimde atandığından emin olmak için parent::__construct() işlevinin de çağrılması hararetle önerilir. Nesne bir karakter dizisi olarak sunulduğunda özelleştirilmiş bir çıktı sağlayabilmek için __toString() yöntemi geçersiz kılınabilir.

Bilginize:

İstisnaların kopyaları yapılamaz. Bir istisnanın kopyasını yapmaya çalışmak ölümcül hatayla (E_FATAL seviyesinden bir hata) ile sonuçlanır.

Örnek 2 - Exception sınıfının genişletilmesi (PHP 5.3.0+)

<?php
/**
 * Özelleştirilmiş bir istisna sınıfı tanımlayalım
 */
class MyException extends Exception
{
    
// İstisnayı yeniden tanımlayalım, böylece ileti seçimlik olmaktan çıkar
    
public function __construct($message$code 0,
                                
Exception $previous null) {
        
// biraz kod

        // her şeyin düzgün atandığından emin olalım
        
parent::__construct($message$code$previous);
    }

    
// nesnenin özelleştirilmiş karakter dizisi gösterimi
    
public function __toString() {
        return 
__CLASS__ ": [{$this->code}]: {$this->message}\n";
    }

    public function 
customFunction() {
        echo 
"Bu türdeki istisnalar için özelleştirilmiş işlev\n";
    }
}


/**
 * İstisnayı denemek için bir sınıf oluşturalım
 */
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:
                
// özelleştirilmiş istisna oluştur
                
throw new MyException('1 geçersiz bir değiştirgedir'5);
                break;

            case 
self::THROW_DEFAULT:
                
// öntanımlı olarak bir oluşturulur.
                
throw new Exception('2 geçerli bir değiştirge değildir'6);
                break;

            default:
                
// İstisna yok; nesne oluşturulacak.
                
$this->var $avalue;
                break;
        }
    }
}


// Örnek 1
try {
    
$o = new TestException(TestException::THROW_CUSTOM);
} catch (
MyException $e) {      // Yakalanacaktır
    
echo "Benim istisnam yakalandı\n"$e;
    
$e->customFunction();
} catch (
Exception $e) {        // Bu atlanır
    
echo "Öntanımlı istisna yakalandı\n"$e;
}

// Çalışmaya devam et
var_dump($o);  // Null
echo "\n\n";


// Örnek 2
try {
    
$o = new TestException(TestException::THROW_DEFAULT);
} catch (
MyException $e) {      // Bu tür ile uyuşmuyor
    
echo "Benim istisnam yakalandı\n"$e;
    
$e->customFunction();
} catch (
Exception $e) {        // Bu yakalanacaktır
    
echo "Öntanımlı istisna yakalandı\n"$e;
}

// Çalışmaya devam et
var_dump($o);  // Null
echo "\n\n";


// Örnek 3
try {
    
$o = new TestException(TestException::THROW_CUSTOM);
} catch (
Exception $e) {        // Yakalanacaktır
    
echo "Öntanımlı İstisna yakalandı\n"$e;
}

// Çalışmaya devam et
var_dump($o);  // Null
echo "\n\n";


// Örnek 4
try {
    
$o = new TestException();
} catch (
Exception $e) {        // Bu atlandır; istisna yok
    
echo "Öntanımlı İstisna yakalandı\n"$e;
}

// Çalışmaya devam et
var_dump($o); // TestException
echo "\n\n";
?>

Bilginize:

Versions of PHP 5, prior to PHP 5.3.0'dan önceki PHP 5 sürümleri iç içe istisnaları desteklemez. Aşağıdaki kod parçası bu örneği çalıştırmak isterseniz MyException sınıfının yerine kullanılabilir.

<?php
/**
 * İstisnayı denemek için bir sınıf oluşturalım
 */
class MyException extends Exception
{
    
// İstisnayı yeniden tanımlayalım, böylece ileti seçimlik olmaktan çıkar
    
public function __construct($message$code 0) {
        
// some code

        // Herşeyin düzgün olarak atandığından emin olalım
        
parent::__construct($message$code);
    }

    
// Nesnenin özel dizge gösterimi
    
public function __toString() {
        return 
__CLASS__ ": [{$this->code}]: {$this->message}\n";
    }

    public function 
customFunction() {
        echo 
"İstisnanın bu türü için özel işlev\n";
    }
}
?>


İstisnalar
PHP Manual