PHP istisna zincirleme uygulamak için nasıl

3 Cevap php

PHP'nin durum için yapıcı üçüncü parametre vardır, documentation diyor ki:

$previous: The previous exception used for the exception chaining. 

Ama iş yapamaz. Benim kod şöyle görünür:

try
{
    throw new Exception('Exception 1', 1001);
}
catch (Exception $ex)
{
    throw new Exception('Exception 2', 1002, $ex);
}

Ben İstisna 2 atılmasını bekliyoruz ve bunu İstisna takılı 1 olacağını bekliyoruz. Ama olsun hepsi:

Fatal error: Wrong parameters for Exception([string $exception [, long $code ]]) in ...

Ben yanlış ne yapıyorum?

3 Cevap

Üçüncü parametre sürümü 5.3.0 gerektirir.

Alıyorum:

Uncaught exception 'Exception' with message 'Exception 1' ...

Next exception 'Exception' with message 'Exception 2' in ...

Sen php> 5.3 kullanıyor?

5.3 önce sadece kendi özel durum sınıfını oluşturabilirsiniz. Ayrıca ben catch (Exception $e) sonra benim kod ziyade ben isteyen kulüpler sadece bir kod daha iyi açıklıyor tüm özel durumları işlemek gerekiyorsa Yani, bunu yapmak için tavsiye edilir.


    class MyException extends Exception
    {
    protected $PreviousException;

    public function __construct( $message, $code = null, $previousException = null )
    {
        parent::__construct( $message, $code );
        $this->PreviousException = $previousException;
    }
    }

    class IOException extends MyException { }

    try
    {
    $fh = @fopen("bash.txt", "w");
    if ( $fh === false)
        throw new IOException('File open failed for file `bash.txt`');
    }
    catch (IOException $e)
    {
    // Only responsible for I/O related errors
    }