diff --git a/language/oop5/exceptions.xml b/language/oop5/exceptions.xml index 17a7ee57eb..5cd69aa1cc 100644 --- a/language/oop5/exceptions.xml +++ b/language/oop5/exceptions.xml @@ -1,11 +1,203 @@ - + Exceptions - . + PHP5 has an exception model similar to that of other programming languages. + An exception can be thrown, try and caught within PHP. A Try block must + include at least one catch block. Multiple catch blocks can be used to + catch different classtypes; execution will continue after that last catch + block defined in sequence. Exceptions can be thrown within catch blocks. + + When an exception is thrown, code following the statement will not be + executed and PHP will attempt to find the first matching catch block. If an + exception is not caught a PHP Fatal Error will be issued with an Uncaught + Exception message, unless there has been a handler defined with + set_exception_handler. + + + Throwing an Exception + + +]]> + + + + + Extending Exceptions + + A User defined Exception class can be defined by extending the built-in + Exception class. The members and properties below, show what is accessible + within the child class that derives from the built-in Exception class. + + + The Built in Exception class + + +]]> + + + + If a class extends the built-in Exception class and re-defines the constructor, it is highly recomended + that it also call parent::__construct() + to ensure all available data has been properly assigned. The __toString() method can be overriden + to provide a custom output when the object is presented as a string. + + + Extending the Exception class + +code}]: {$this->message}\n"; + } + + public function customFunction() { + echo "A Custom function for this type of exception\n"; + } + +} + +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: + // throw custom exception + throw new MyException('1 is an invalid parameter', 5); + break; + + case self::THROW_DEFAULT: + // throw default one. + throw new Exception('2 isnt allowed as a parameter', 6); + + break; + + default: + // No exception, object will be created. + $this->var = $avalue; + break; + + } + + } + +} + +$o = null; + +try { + $o = new TestException(TestException::THROW_CUSTOM); +} +catch (MyException $e) { /* Will be caught */ + echo "Caught my exception\n", $e; + $e->customFunction(); +} +catch (Exception $e) { /* Skipped */ + echo "Caught Default Exception\n", $e; +} +var_dump($o); /* continue execution */ +echo "\n\n"; + +try { + $o = new TestException(TestException::THROW_DEFAULT); +} +catch (MyException $e) { /* Doesn't match this type */ + echo "Caught my exception\n", $e; + $e->customFunction(); +} +catch (Exception $e) { /* Will be caught */ + echo "Caught Default Exception\n", $e; +} +var_dump($o); /* continue execution */ +echo "\n\n"; + + +try { + $o = new TestException(TestException::THROW_CUSTOM); +} +catch (Exception $e) { /* Will be caught */ + echo "Default Exception caught\n", $e; +} +var_dump($o); /* continue execution */ +echo "\n\n"; + +try { + $o = new TestException(); +} +catch (Exception $e) { /* skipped, no exception */ + echo "Default Exception caught\n", $e; +} +var_dump($o); /* continue execution */ +echo "\n\n"; + + +]]> + + +