Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php] Exception, problem z obsługą błędów
Fixus
post 20.02.2008, 16:36:59
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
Go to the top of the page
+Quote Post
Jarod
post 20.02.2008, 16:43:25
Post #2





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

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


Cytat(Fixus @ 20.02.2008, 16:36:59 ) *
(...)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)
Go to the top of the page
+Quote Post
Fixus
post 20.02.2008, 17:00:11
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
Go to the top of the page
+Quote Post
Jarod
post 20.02.2008, 17:03:36
Post #4





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

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


Cytat(Fixus @ 20.02.2008, 17:00:11 ) *
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)
Go to the top of the page
+Quote Post
Fixus
post 20.02.2008, 18:04:06
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ć smile.gif
Go to the top of the page
+Quote Post
Jarod
post 20.02.2008, 18:09:02
Post #6





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

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


Cytat(Fixus @ 20.02.2008, 18:04:06 ) *
a możesz powiedzieć czemu nie powinienem? Chce to dobrze zrozumieć smile.gif

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)
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: 22.06.2025 - 22:26