Utöka undantag
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/