![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 295 Pomógł: 9 Dołączył: 8.02.2006 Ostrzeżenie: (0%) ![]() ![]() |
Witam
Mam taki problemik...próbuje się nauczyć dobrze obsługiwać błędy przy wykorzystaniu klasy exception. Zacząłem od stworzenia własnej klasy Kod <?php class contentException extends Exception { // Redefine the exception so message isn't optional public function __construct($message, $code = 0) { // some code // make sure everything is assigned properly parent::__construct($message, $code); } // custom string representation of object public function __toString() { return __CLASS__ . ": [{$this->code}]: {$this->message}\n"; } } ?> teraz mam taki kawałek kodu (fragment klasy addContent): Kod function setContent($content) { if(!is_string($content) || strlen($content) == 0) { throw new contentException('Niepoprawna treść!'); } else { echo $content; $this->_content = $content; } } I teraz mój problem polega na tym. Jeżeli zrobie tak (w pliku test.php gdzie testuję powyższą klasę): Kod $content->setContent(''); to owszem wyświetli mi komunikat "niepoprawna treść" ale wyskoczy to jako fatal error wraz z ścieżką do pliku chyba że dam to w bloki try i catch. Jednakże dla mnie to się mija z celem bo musiałbym każdą metodę dawać w te bloki. Więcej czasu zajęło by mi pisanie samych try catch niż tworzenie aplikacji :/ czy można jakoś wymusić żeby kod który zrobiłem generował wyjątki tak jak należy bez okładania każdej metody blokami try i catch ?
Ten post edytował Fixus 20.02.2008, 16:40:38 |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 190 Pomógł: 27 Dołączył: 23.04.2005 Ostrzeżenie: (0%) ![]() ![]() |
(...)ale wyskoczy to jako fatal error wraz z ścieżką do pliku chyba że dam to w bloki try i catch. Jednakże dla mnie to się mija z celem bo musiałbym każdą metodę dawać w te bloki. Więcej czasu zajęło by mi pisanie samych try catch niż tworzenie aplikacji :/ czy można jakoś wymusić żeby kod który zrobiłem generował wyjątki tak jak należy bez okładania każdej metody blokami try i catch ? Jeśli chcesz obsługiwać wyjątki to, wyjątek musi zostać zgłoszony w bloku try i musisz taki wyjątek przechwycić (catch). Nie da się inaczej. Ja w klasach wyrzucam tylko wyjątki, a w głównym kontrolerze (index.php) umieściłem try-catch. Pzdr -------------------- ”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335) |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 295 Pomógł: 9 Dołączył: 8.02.2006 Ostrzeżenie: (0%) ![]() ![]() |
yhm a czy dużym błędem jest jeśli metodę w klasie zakoduje tak:
Kod function setContent($content) { try { if(!is_string($content) || strlen($content) == 0) { throw new contentException('Niepoprawna treść news`a!'); } else { $this->_content = $content; } } catch (contentException $ex) { echo $ex->getMessage(); } } Bo coś chyba czytałem gdzieś, że nie powinno się dawać instrukcji echo w kodzie klasy |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 1 190 Pomógł: 27 Dołączył: 23.04.2005 Ostrzeżenie: (0%) ![]() ![]() |
yhm a czy dużym błędem jest jeśli metodę w klasie zakoduje tak: Kod function setContent($content) { try { if(!is_string($content) || strlen($content) == 0) { throw new contentException('Niepoprawna treść news`a!'); } else { $this->_content = $content; } } catch (contentException $ex) { echo $ex->getMessage(); } } Bo coś chyba czytałem gdzieś, że nie powinno się dawać instrukcji echo w kodzie klasy To nie jest błąd bo skrypt działa. IMO nie powinieneś tego tak pisać. -------------------- ”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335) |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 295 Pomógł: 9 Dołączył: 8.02.2006 Ostrzeżenie: (0%) ![]() ![]() |
a możesz powiedzieć czemu nie powinienem? Chce to dobrze zrozumieć
![]() |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 1 190 Pomógł: 27 Dołączył: 23.04.2005 Ostrzeżenie: (0%) ![]() ![]() |
a możesz powiedzieć czemu nie powinienem? Chce to dobrze zrozumieć ![]() Przepraszam Cię bardzo. Jest ok. Źle przeczytałem. Wstaw kod w znaczniki [php] - będzie się łatwiej czytać. Pozdrawiam EDIT: Chociaż ja preferuję inny sposób. Ale ja stosuję MVC i u mnie widok jest odpowiedzialny za wyświetlanie. W kontrolerze łapie wszystkie wyjątki. Ten post edytował Jarod 20.02.2008, 18:11:45 -------------------- ”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335) |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 22.06.2025 - 22:26 |