Ponieważ wyjątek jest obiektem możemy sobie go dopasować do naszych potrzeb. Dodanie nowych metod czy właściwości nie sprawi problemu, a może znacznie ułatwić nam prace z naszym systemem.
<?php class LogEx { static protected $aLog = array(); static public function add( ProException $Ex ) { self::$aLog[] = $Ex; } static public function get() { return self::$aLog; } } class ProException extends Exception { protected $bHandle = false; public function __construct( $sMessage, $iCode = 0 ) { parent::__construct( $sMessage, $iCode ); $this->bHandle = false; LogEx::add( $this ); } public function handled() { $this->bHandle = true; } public function inHandled() { return $this->bHandle; } public function __toString() { return __CLASS__ . ': ['.$this->code.']: '.$this->message."\n"; } } ?>
Powyższy kod obrazuje nam jak bardzo prosto możemy zrobić z wyjątkami to, co nam jest potrzebne. Rozbudowałem wyjątek tak, że będzie on raportował o swoim stanie, to znaczy jest dodawany do listy wyjątków i jeżeli programista go obsłuży, np tak:
<?php try { throw new ProException( 'Test' ); } catch( ProException $Ex ) { // obsłużony $Ex->handled(); } $aExList = LogEx::get(); foreach( $aExList As $Ex ) { echo ( $Ex->inHandled() ? 'Złapany' : 'Nie złapany' ).' : ', $Ex; } ?>
Dzięki temu, mamy dostęp do listy wszystkich wyjątków jakie pojawiły się nam podczas pracy systemu. Zostajemy także poinformowani czy systemowi udało się rozwiązać problem. W bardzo prosty sposób możemy także oddać opis jak z danym problemem system sobie poradził.
Oczywiście to co zrobicie z własnymi obiektami zależy tylko od waszej wyobraźni i potrzeb. :-)
Leave a reply