Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> __autoload()
theoden
post 10.05.2005, 07:15:09
Post #1





Grupa: Zarejestrowani
Postów: 33
Pomógł: 0
Dołączył: 21.03.2004
Skąd: Radom

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


Mam takie pytanie. Funkcja __autoload() spróbuje dołączyć plik jeżeli będe chcial skorzystać z klasy która nie została jeszcze zdefinjowana. Działa to oczywiście i plik z klasą zostaje dołączony tyle że :

  1. //dołączony.php
  2. <?
  3. # Global variable - check point
  4. define(&#092;"ERROR_HANDLER_LOADED\",true);
  5.  
  6.  
  7. class Error_Handler extends Exception {
  8.  
  9.  
  10. /**
  11.  * @var string
  12.  * @access private
  13.  */
  14.  
  15. private $error_messages;
  16.  
  17. /**
  18.  * Construct
  19. * @param string $message Message from exception
  20. * @param int $code Code of exception 
  21. * @access public 
  22. */ 
  23.  
  24. public function __construct($message=null, $code = 0)
  25. {
  26.  
  27. $this->error_messages = array();
  28. $this->load_errors();
  29. # We make sure that everything is asigned properly
  30. parent::__construct($message, $code);
  31. }
  32.  
  33. /**
  34.  * Loading all errors
  35.  * @return bool
  36.  * @access private
  37.  */
  38. private function load_errors()
  39. {
  40.  
  41. global $ERRORS;
  42.  
  43. if (empty($ERRORS))
  44. return false;
  45.  
  46. foreach ($ERRORS as $key => $value){
  47. $this->error_messages[$key] = $value;
  48. }
  49. echo &#092;"<pre>\";
  50. print_r($this->error_messages);
  51. echo &#092;"</pre>\";
  52. return true;
  53. }
  54.  
  55. /**
  56.  * Display errors (Param $message from __construct)
  57.  * @return void
  58.  * @access public
  59.  */
  60.  
  61. public function alert()
  62. {
  63. print self::getCode() . ' : ' . $this->error_messages[$this->message];
  64. }
  65. }
  66.  
  67. // US English
  68. $ERRORS[&#092;"SAMPLE_ERR_CODE\"] = \"This is an error message.\";
  69. $ERRORS[&#092;"SAMPLE\"] = \"This.\";
  70.  
  71. try {
  72. throw new Error_Handler('SAMPLE_ERR_CODE');}
  73. catch (Error_Handler $e){
  74. $e->alert();}
  75.  
  76.  
  77. ?>

metoda function load_errors() nie widzi tablicy $ERRORS i nie może wczytać sobie komunikatu. Jeżeli normlanie plik dołączony dam jako
  1. <?php
  2.  
  3. require_once $plik.php
  4.  
  5. ?>

To wszystko działa jak powinno. Stąd moje pytanie czy __autoload() chodź ma np. w manualu w swoim ciele require* to dołancza tylko interfejsy klas czy poprostu tylko je zwraca bo jeżeli dam tak :
  1. <?php
  2.  
  3. function __autoload($klasa)
  4. {
  5. require_once $plik . '.php';
  6. // i teraz 
  7. echo $ERRORS['cosTam'];
  8. }
  9. echo $ERRORS['cosTam']; // tu już nie widzi.
  10.  
  11. ?>

to widzi zmienną z tablicy.


--------------------
Go to the top of the page
+Quote Post
dr_bonzo
post 10.05.2005, 07:37:58
Post #2





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


__autoload() jesli ma require* to TYLKO dolacza ten plik.

  1. <?php
  2. private function load_errors()
  3. {
  4.  
  5. global $ERRORS;
  6. ?>

Zamiast czegos takiego zrob:
  1. <?php
  2. private function load_errors( $arrMessages )
  3. {
  4.  
  5. (...)
  6.  
  7. $obj->load_errors( $ERRORS );
  8.  
  9. ?>

Uniezaleznia to klase od danych zewnetrznych, mozna ja bedzie wykorzystac w innym kodzie bez jej przerabiania (inaczej musialbys pilnowac zeby istniala w odpowiednim momencie tablica $ERRORS).


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
FiDO
post 10.05.2005, 08:48:53
Post #3





Grupa: Przyjaciele php.pl
Postów: 1 717
Pomógł: 0
Dołączył: 12.06.2002
Skąd: Wolsztyn..... Studia: Zielona Góra

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


Przenosze na PHP5.


--------------------
Brak czasu :/
Go to the top of the page
+Quote Post

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 Wersja Lo-Fi Aktualny czas: 17.06.2025 - 14:23