Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Błąd z obsługą błędów
Forum PHP.pl > Forum > Przedszkole
daw22
  1. <?php
  2. class Wyjatek
  3. {
  4. function __construct(string $message = NULL, int $code = NULL)
  5. {
  6. {
  7. $this->message = $message;
  8. }
  9. $this->code = $code;
  10. $this->file = __FILE__;
  11. $this->line = __LINE__;
  12. $this->trace = debug_backtrace();
  13. $this->string = StringFormat($this);
  14. }
  15.  
  16. protected $message = 'Nieznany błąd krytyczny';
  17. protected $code = 0;
  18. protected $file;
  19. protected $line;
  20.  
  21. private $trace;
  22. private $string;
  23.  
  24. final function getMessage()
  25. {
  26. return $this->message;
  27. }
  28. final function getCode()
  29. {
  30. return $this->code;
  31. }
  32. final function getFile()
  33. {
  34. return $this->file;
  35. }
  36. final function getLine()
  37. {
  38. return $this->line;
  39. }
  40. final function getTrace()
  41. {
  42. return $this->trace;
  43. }
  44. final function getTraceAsString()
  45. {
  46. return self::TraceFormat($this);
  47. }
  48. function __toString()
  49. {
  50. return '<table>
  51. <tr>
  52. <td><strong>' . $this->getCode() . '</strong>: ' . $this->getMessage() . '<br /></td>
  53. <td>Nastąpił w pliku ' . $this->getFile(). ' w lini ' . $this->getLine() . '</td></tr></table>';
  54.  
  55. }
  56. static private function StringFormat(Exception $exception)
  57. {
  58. //
  59. //
  60. }
  61. static private function TraceFormat(Exception $exception)
  62. {
  63. //
  64. //
  65. }
  66. }
  67. try
  68. {
  69. throw new Wyjatek('Wystąpił błąd krytyczny', 2);
  70. }
  71. catch(Wyjatek $ee)
  72. {
  73. echo $ee;
  74. }
  75. ?>


Powoduje to Fatalny Błąd:
Kod
[b]Fatal error[/b]: Argument 1 passed to Wyjatek::__construct() must be an object of class string, called in D:\WebServer\httpd\index.php on line 168 and defined in [b]D:\WebServer\httpd\index.php[/b] on line [b]91

[/b]Liniami kodu proszę się nie przejmować, wszystko jest zaznaczone jako komenatrze. Nie wiem dlaczego tak się dzieje [chodzi o błąd].
Proszę o pomoc w tej kwestii z góry pięknie dziękuję.
Pozdrowionka
puz219
A spróbuj tak:

  1. <?php
  2. function __construct($message, $code)
  3. ?>
daw22
Kod
Fatal error: Call to undefined function StringFormat() in D:\WebServer\httpd\index.php on line 101

Identyczny przykład jest w książce i jeszcze problemy występują..
nevt
drobne uwagi do tej linijki:
  1. <?php
  2. function __construct(string $message = NULL, int $code = NULL)
  3. ?>

- kostruktor powinien być publiczny, czyli: public function ....
- rzutujesz parametry na string i int a domyslnie ustawiasz NULL...
- pokaż te linijki kodu w których generowane są błędy:
1. D:\WebServer\httpd\index.php on line 91
2. D:\WebServer\httpd\index.php on line 101
3. D:\WebServer\httpd\index.php on line 168

ogólne wrażenie mam, że kod PHP 5 odpalasz na serwerze PHP 4 - ale moge sie mylić...
daw22
spokojnie aż taki głupi nie jestem, kod odpalam na PHP 5.1.5
Linia 91:
Kod
public function __construct($message, $code)

Linia 101:
Kod
$this->string = StringFormat($this);

Linia 168:
Kod
throw new Wyjatek('Wystąpił okropny błąd', 42);

Po usunięciu rzutowania, nadal błąd występuje ale teraz odnosi się do linii 101 z komunikatem:
Kod
Fatal error: Call to undefined function StringFormat() in D:\WebServer\httpd\index.php on line 101


Po usunięciu:
Kod
$this->string = StringFormat($this);


Pojawia się błąd:
Kod
Fatal error: Exceptions must be valid objects derived from the Exception base class in D:\WebServer\httpd\index.php on line 167


A linia 167 to linia 168 (tylko że usunąłem pewien fragment, który w znajduje się nad kodem który napisałem)
nevt
Cytat(daw22 @ 31.01.2008, 14:25:38 ) *
spokojnie aż taki głupi nie jestem, kod odpalam na PHP 5.1.5
Linia 91:
Kod
public function __construct($message, $code)

Linia 101:
Kod
$this->string = StringFormat($this);

Linia 168:
Kod
throw new Wyjatek('Wystąpił okropny błąd', 42);

Po usunięciu rzutowania, nadal błąd występuje ale teraz odnosi się do linii 101 z komunikatem:
Kod
Fatal error: Call to undefined function StringFormat() in D:\WebServer\httpd\index.php on line 101


Po usunięciu:
Kod
$this->string = StringFormat($this);


Pojawia się błąd:
Kod
Fatal error: Exceptions must be valid objects derived from the Exception base class in D:\WebServer\httpd\index.php on line 167


A linia 167 to linia 168 (tylko że usunąłem pewien fragment, który w znajduje się nad kodem który napisałem)

no to po kolei:

linia 91: zmienna $message nie jest objektem klasy string smile.gif o ile pamiętam, to w parametrach funkcji i metod PHP 5 można wymuszać tylko rzutowanie na obiekt konkretnej klasy albo tablicę - czyli twój napis string jest traktowany jako nazwa klasy...

linia 101: nie ma funkcji StringFormat() - to przecież metoda twojej klasy, więc z jej wnętrza musisz się odwoływać $this->StringFormat()...

linia 168: jak komunikat ładnie tłumaczy, skoro klasa Wyjatek ma byc stosowana do obslugi i generacji wyjątków, to musi dziedziczyć po klasie Exception, czyli zacznij cały kod od:

  1. <?php
  2. class Wyjatek extends Exception
  3. {
  4. ...
  5. }
  6. ?>

powodzenia.
daw22
Kod
Fatal error: Cannot override final method Exception::getMessage() in D:\WebServer\httpd\index.php on line 143

A linia 143:
Kod
}

Znacznik zamykający
  1. <?php
  2. class Wyjatek extends Exception
  3. ?>
nevt
wywal to wszystko...
  1. <?php
  2. protected $message = 'Nieznany błąd krytyczny';
  3. protected $code = 0;
  4. protected $file;
  5. protected $line;
  6.  
  7. final function getMessage()
  8. {
  9. return $this->message;
  10. }
  11. final function getCode()
  12. {
  13. return $this->code;
  14. }
  15. final function getFile()
  16. {
  17. return $this->file;
  18. }
  19. final function getLine()
  20. {
  21. return $this->line;
  22. }
  23. final function getTrace()
  24. {
  25. return $this->trace;
  26. }
  27. final function getTraceAsString()
  28. {
  29. return self::TraceFormat($this);
  30. }
  31. ?>

skoro włączasz dziedziczenie po obiekcie Exception to nie nadpisuj jego właściwości i metod - sczególnie że są zdefiniowane jako final...
daw22
#up,
dziękuję, że poświęciłeś mi czas. Pomogło smile.gif.
Problem rozwiązany.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.