Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> "throw" w __autoload
pawel_k
post
Post #1





Grupa: Zarejestrowani
Postów: 211
Pomógł: 3
Dołączył: 29.07.2005
Skąd: Szczebrzeszyn

Ostrzeżenie: (0%)
-----


witam wszystkich.
mam taki mały problem, czy da się przechwycić wyjątki wyrzucone przez __autoload() ?

kod mam następujący:

  1. <?php
  2. try
  3. {
  4. $resConn = DB::getConn();
  5. $objSmarty->display('common/index.tpl');
  6. }
  7. catch(DBconnError $e1)
  8. {
  9. $objSmarty->display('common/DBerror.tpl');
  10. }
  11. catch(NoClassFoundError $e2)
  12. {
  13.  $objSmarty->display('common/NoClassFoundError.tpl');
  14. }
  15.  
  16. ?>


a w klasie DB:
  1. <?php
  2. class DB
  3. {
  4. /**
  5.  * resConnection - przechwuje identyfikator połączenia z bazą danych
  6.  *
  7.  * @var resource
  8.  * @access private
  9.  */
  10. private static $resConnection;
  11.  
  12. /**
  13.  * objDataBase - obiekt odpowiedzialny za komunikację z bazą danych
  14.  *
  15.  * @var object
  16.  * @access private
  17.  */
  18.  private static $objDataBase;
  19.  
  20. /**
  21.  * Konstruktor - tworzy nowy obiekt odpowiedzialny za komunikację z bazą danych
  22.  *
  23.  * @param void
  24.  * @access private
  25.  * @return void
  26.  * @throws NoClassFoundError
  27.  * @throws DBconnError
  28.  */
  29. private function __construct()
  30. {
  31. try
  32. {
  33. $strDB_Class = DB_TYPE.'DB_handler';
  34. $this->objDataBase = new $strDB_Class();
  35.  
  36. }
  37. catch(NoClassFoundError $e)
  38. {
  39. throw $e;
  40. }
  41.  
  42. if(!($this->resConnection = $this->objDataBase->getConnection()))
  43. {
  44. throw new DBconnError();
  45. }
  46. }
  47.  
  48. /**
  49.  * getConn metoda zwraca identyfikator połączenia
  50.  *
  51.  * @param void
  52.  * @access public
  53.  * @return resource
  54.  * @throws NoClassFoundError
  55.  * @throws DBconnError
  56.  */
  57. public static function getConn()
  58. {
  59. if(!self::$resConnection)
  60. {
  61. try
  62. {
  63. new DB();
  64. }
  65. catch(NoClassFoundError $e1)
  66. {
  67. throw $e1;
  68. }
  69. catch(DBconnError $e2)
  70. {
  71. throw $e2;
  72. }
  73. }
  74. return self::$resConnection;
  75. }
  76. }
  77.  
  78. ?>


autoloader wyglada tak:
  1. <?php
  2.  
  3. function __autoload($strClass)
  4. {
  5. if(file_exists('../modules/'.$strClass.'/class.'.$strClass.'.php'))
  6. {
  7. @require_once('../modules/'.$strClass.'/class.'.$strClass.'.php');
  8. }
  9. else
  10. {
  11. throw new NoClassFoundError();
  12. }
  13. }
  14.  
  15. ?>


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?
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 07:04