İ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
    
protected $code 0;                     // kullanıcı tanımlı istisna kodu
    
protected $file;                         // istisnanın kaynak dosyası
    
protected $line;                  // istisnanın kaynak dosyasındaki satırı

    
function __construct($message null$code 0);

    final function 
getMessage();                // istisna iletisi
    
final function getCode();                   // istisnanın kodu
    
final function getFile();                   // kaynak dosya
    
final function getLine();                   // kaynak dosya satırı
    
final function getTrace();                  // backtrace() dizisi
    
final function getTraceAsString();          // trace için biçemlenmiş
                                                // karakter dizisi
    /* Geçersiz kılınabilir */
    
function __toString();  // görüntüleme için biçemlenmiş karakter dizisi
}
?>

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.

Örnek 2 - Exception sınıfının genişletilmesi

<?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) {
        
// biraz kod

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

    
// 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);
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);
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);
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);
echo 
"\n\n";
?>

İstisnalar
PHP Manual