ďťż

[PHP/OOP] Exception - własna obsługa błędów. Błąd w klasie.

       

Podstrony


telcocafe

Witam mam oto taki kod php:
<?php class Error { protected $message='Unknown exception'; protected $desc; protected $code; protected $file; protected $line; protected $trace; public function __construct(string $desc=NULL, int $code=NULL, string $message=NULL) { if(!empty($message) && $message !== 0) { $this->message = $message; } $this->code = $code; $this->file = __FILE__; $this->line = __LINE__; $this->trace = debug_backtrace(); } final function get_message() { return $this->message; } final function get_desc() { return $this->desc; } final function get_code() { return $this->code; } final function get_file() { return $this->file; } final function get_line() { return $this->line; } final function get_trace() { return $this->trace; } public function __toString() { return '<div style="width:90%; margin:0 auto; padding:5px; background-color:#555; border:1px solid #000;"> <b>Exception '.$this->get_code().':</b> '.$this->get_desc(). '<br><b>File:</b> '.$this->get_file().' <b>Line:</b> '.$this->get_line(). '<br><b>Error:</b> '.$this->get_desc(); } } ?> Jest to dosłownie odrobinę zmieniona klasa Exception.
Wywołanie błędu:
<?php public function connect($db_host,$db_user,$db_pass,$db_name,$db_port) { try { $this->db_host = $db_host; $this->db_port = $db_port; $this->db_name = $db_name; if(true == ($this->db_link = @mysqli_connect($db_host,$db_user,$db_pass,$db_name,$db_port))) { return true; } else { throw new Error('Connection Problem', 0); } } catch (Error $e) { die($e->__toString()); } } ?> Wywołuję go specjalnie zmieniając nazwę użytkownika dostępu do bazy na niepoprawną.
Pojawia mi się błąd:

Catchable fatal error: Argument 1 passed to Error::__construct() must be an instance of string, string given, called in D:\WWW\orglee\class\class_mysql.php on line 70 and defined in D:\WWW\orglee\class\class_exception.php on line 13
Co jest nie tak ? Dlaczego wyświetla mi ten błąd i co on oznacza ? Na googlach znalazłem tylko ten błąd w CMS Joomla (błąd dotyczył template'a) a rozwiązania błędu nie było. Próbowałem tą klasę zadeklarować jako rozszerzenie Exception jako klasę nierozszerzającą Exception nadal błąd jest ten sam o co w tutaj chodzi ? :(



A co Ci daje ta klasa którą napisałeś? (a'la Exception)
Przecież możesz zrobić jakąś klasę dziedziczącą po Exception i zmienić jej __toString()
Ja w tej twojej klasie nic nie widzę specjalnie innego niż w Exception, może powiesz co chcesz uzyskać? Może da się to inaczej rozwiązać?
;)

// i jeszcze tego nie rozumiem...
die($e->__toString());
przeciez po to jest __toString(); zeby go nie wywoływać tylko np
echo $e;
;)
Użytkownik master_dos edytował ten post 13 luty 2007, 12:47
Dodał bym specjalne funkcje ale skoro mi to nie działa to po diabła mam teraz dodawać ?
A die() dałem na razie czasowo póki nie dodam specjalnych właściwości czyli na przykład stałej DEBUGGING definiowanej w config.php a skrypt będzie albo wyświetla albo zapisywał w logu błędy strony. Dodam jeszcze kilka udogodnień.
Jednak nie zrobię tego teraz bo po co skoro mi klasa nie działa.

(string $desc=NULL, int $code=NULL, string $message=NULL) - po co rzutujesz to ? (o to się burzy). Zamiast się bawić w tworzenie wszystkiego lepiej byłoby wybranie frameworka i spokój. Po to używam np. Django żeby zajmować się tworzeniem aplikacji a nie pierdół ;)



No tak ale Django ma zapewne oprócz zalet też i wady.
Właśnie po to bawię się w tworzenie pierdół żebym przynajmniej wiedział co w tych pierdołach siedzi.
To jest podstawa mojego własnego frameworka.

Celem frameworka jest ułatwienie tworzenia aplikacji i zdjęcie z programisty obowiązku tworzenia całej struktury frameworka i jego bazowych komponentów - czy to będzie CodeIgniter czy Django. Nie jest wymagana znajomość "jak to działa" - na tym polega idea frameworka. A w genialne jednoosobowe frameworki nie wierzę. Nie osiągniesz niczego lepszego niż to co ma CodeIgniter czy np. Prado. Tworzenie aplikacji we frameworku jest proste. Stworzenie dobrego frameworka - bardzo trudne. Jeżeli masz ochotę stworzyć frameworka, który może do czegoś się z czasem nadawać - http://rapide.pl/ dołącz do zespołu.
Użytkownik Riklaunim edytował ten post 13 luty 2007, 18:08
Riklaunim we mnie nie wierzy chyba się rzucę do pustego basenu szpitalnego. :(
CodeIgniter stosowałem przez miesiąc i nie mam o nim dobrego zdania nie wymienię ci wszystkiego co mnie w nim wkurzało. Django nie używałem, ale podejrzewam że tak samo jak każdy ma swoje bolączki.
Napiszę swój to przynajmniej będę znał każdą jego część co jest niewątpliwą zaletą.
Użytkownik orglee edytował ten post 13 luty 2007, 20:04
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • nvm.keep.pl

  • Sitedesign by AltusUmbrae.