Utöka undantag

Från Wiki.linux.se
Hoppa till navigering Hoppa till sök

Utöka undantag

En användardefinierad undantagsklass kan definieras genom att utöka den inbyggda Exception-klassen. Medlemmarna och egenskaperna nedan visar vad som är tillgängligt inom den barnklass som härleds från den inbyggda Exception-klassen.

Exempel #1 Den inbyggda Exception-klassen

<?php
class Exception implements Throwable
{
    protected $message = 'Okänt undantag';   // undantagsmeddelande
    private   $string;                        // __toString cache
    protected $code = 0;                      // användardefinierad undantagskod
    protected $file;                          // källfilnamn för undantaget
    protected $line;                          // källrad för undantaget
    private   $trace;                         // bakspårning
    private   $previous;                      // föregående undantag om det är nästlat

    public function __construct($message = '', $code = 0, Throwable $previous = null);

    final private function __clone();         // Förhindrar kloning av undantag.

    final public  function getMessage();      // meddelande om undantag
    final public  function getCode();         // kod för undantag
    final public  function getFile();         // källfilnamn
    final public  function getLine();         // källrad
    final public  function getTrace();        // en array av bakspårningen
    final public  function getPrevious();     // föregående undantag
    final public  function getTraceAsString();// formaterad sträng av spårningen

    // Kan åsidosättas
    public function __toString();             // formaterad sträng för visning
}
?>

Om en klass utökar den inbyggda Exception-klassen och omdefinierar konstruktorn, rekommenderas det starkt att den också anropar parent::__construct() för att säkerställa att all tillgänglig data har tilldelats korrekt. Metoden __toString() kan åsidosättas för att tillhandahålla en anpassad utdata när objektet presenteras som en sträng.

Notera:

Undantag kan inte klonas. Försök att klona ett undantag resulterar i ett fatalt E_ERROR-fel.

Exempel #2 Utöka Exception-klassen

<?php
/**
 * Definiera en anpassad undantagsklass
 */
class MyException extends Exception
{
    // Omdefiniera undantaget så att meddelandet inte är valfritt
    public function __construct($message, $code = 0, Throwable $previous = null) {
        // någon kod

        // säkerställ att allt tilldelas korrekt
        parent::__construct($message, $code, $previous);
    }

    // anpassad strängrepresentation av objektet
    public function __toString() {
        return __CLASS__ . ": [{$this->code}]: {$this->message}\n";
    }

    public function customFunction() {
        echo "En anpassad funktion för denna typ av undantag\n";
    }
}


/**
 * Skapa en klass för att testa undantaget
 */
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:
                // kasta anpassat undantag
                throw new MyException('1 är en ogiltig parameter', 5);
                break;

            case self::THROW_DEFAULT:
                // kasta standardundantag.
                throw new Exception('2 är inte tillåtet som parameter', 6);
                break;

            default:
                // Inget undantag, objektet kommer att skapas.
                $this->var = $avalue;
                break;
        }
    }
}


// Exempel 1
try {
    $o = new TestException(TestException::THROW_CUSTOM);
} catch (MyException $e) {      // Kommer att fångas
    echo "Fångade mitt undantag\n", $e;
    $e->customFunction();
} catch (Exception $e) {        // Hoppar över
    echo "Fångade standardundantag\n", $e;
}

// Fortsätt körning
var_dump($o); // Null
echo "\n\n";


// Exempel 2
try {
    $o = new TestException(TestException::THROW_DEFAULT);
} catch (MyException $e) {      // Matchar inte denna typ
    echo "Fångade mitt undantag\n", $e;
    $e->customFunction();
} catch (Exception $e) {        // Kommer att fångas
    echo "Fångade standardundantag\n", $e;
}

// Fortsätt körning
var_dump($o); // Null
echo "\n\n";


// Exempel 3
try {
    $o = new TestException(TestException::THROW_CUSTOM);
} catch (Exception $e) {        // Kommer att fångas
    echo "Standardundantag fångat\n", $e;
}

// Fortsätt körning
var_dump($o); // Null
echo "\n\n";


// Exempel 4
try {
    $o = new TestException();
} catch (Exception $e) {        // Hoppar över, inget undantag
    echo "Standardundantag fångat\n", $e;
}

// Fortsätt körning
var_dump($o); // TestException
echo "\n\n";
?>

Sidslut

Orginalhemsidan på Engelska : https://www.php.net/manual/en/language.exceptions.extending.php
PHP
Språkreferens


Det här är en maskinöversättning av PHP-manualen till svenska. Om du hittar fel är vi tacksamma om du rapporterar dem via formuläret som finns på https://www.linux.se/kontaka-linux-se/