witam wszystkich.
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
*/
private static $resConnection;
/**
* 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
*/
public static function getConn
() {
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)
{
if(file_exists('../modules/'.$strClass.'/class.'.$strClass.'.php')) {
@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?