mam taki mały problem, czy da się przechwycić wyjątki wyrzucone przez __autoload() ?
kod mam następujący:
<?php try { $resConn = DB::getConn(); $objSmarty->display('common/index.tpl'); } catch(DBconnError $e1) { $objSmarty->display('common/DBerror.tpl'); } catch(NoClassFoundError $e2) { $objSmarty->display('common/NoClassFoundError.tpl'); } ?>
a w klasie DB:
<?php class DB { /** * resConnection - przechwuje identyfikator połączenia z bazą danych * * @var resource * @access private */ /** * objDataBase - obiekt odpowiedzialny za komunikację z bazą danych * * @var object * @access private */ /** * Konstruktor - tworzy nowy obiekt odpowiedzialny za komunikację z bazą danych * * @param void * @access private * @return void * @throws NoClassFoundError * @throws DBconnError */ private function __construct() { try { $strDB_Class = DB_TYPE.'DB_handler'; $this->objDataBase = new $strDB_Class(); } catch(NoClassFoundError $e) { throw $e; } if(!($this->resConnection = $this->objDataBase->getConnection())) { throw new DBconnError(); } } /** * getConn metoda zwraca identyfikator połączenia * * @param void * @access public * @return resource * @throws NoClassFoundError * @throws DBconnError */ { if(!self::$resConnection) { try { new DB(); } catch(NoClassFoundError $e1) { throw $e1; } catch(DBconnError $e2) { throw $e2; } } return self::$resConnection; } } ?>
autoloader wyglada tak:
<?php function __autoload($strClass) { { @require_once('../modules/'.$strClass.'/class.'.$strClass.'.php'); } else { throw new NoClassFoundError(); } } ?>
i teraz jak próbuję wczytać klasę która nie istnieje to zamiast przechwycić mi błąd najpierw w klasie DB i przekazać go do obsłużenia do index.php wyświetla mi w przeglądarce:
Cytat
Fatal error: Function __autoload(PostgresqlDB_handler) threw an exception of type 'NoClassFoundError' in /var/www/projekty/framework/libs/DB/class.DB.php on line 56
można jakoś przechwycić ten wyjątek?