Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Dwa wyjątki czy konieczne?
Fred1485
post 6.04.2015, 16:50:48
Post #1





Grupa: Zarejestrowani
Postów: 361
Pomógł: 22
Dołączył: 10.02.2015

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


Witam znów biggrin.gif

Postanowiłem jednak stworzyć tą nakładkę dla PDO, i mam taki problem:

  1. public function prepare($query = FALSE) {
  2.  
  3. $this->query = $query;
  4.  
  5. try {
  6.  
  7. if($this->connection == FALSE || $this->query == FALSE) { //sprawdzam czy jest połączenie oraz czy przekazano query
  8.  
  9. throw new Exception('blad', 1); //tutaj jakiś przykładowy błąd jeśli nie spełnione warunki
  10. }
  11. $this->stmt = $this->connection->prepare($this->query); //tu wiadomo chyba
  12. $this->stmt->execute(); //TUTAJ TYLKO CHWILOWO żeby sprawdzić
  13. }
  14. catch(PDOException $e) {
  15. $this->error(array('text' => $e->getMessage(), 'code' => $e->getCode())); //Przekazanie do funkcji (w niej następuje na razie proste echo)
  16.  
  17. }
  18. catch(Exception $e) {
  19. $this->error(array('text' => $e->getMessage(), 'code' => $e->getCode())); //jak wyżej
  20.  
  21. }
  22. }


Jak widać tutaj wyłapuję dwa wyjątki, pierwszy od PDO jeśli w execute coś by nie poszło z zapytaniem(dlatego dałem tymczasowo w tej funkcji), natomiast drugi własny jeśli jakieś tam warunki nie zostaną spełnione, i tutaj pytanie czy ja dobrze myślę teraz z tym przechwytywaniem dwóch wyjątków, jest to poprawne, czy jakoś inaczej to powinienem rozwiązać, zauważyłem też że jak PDOException zamienię na Exception to wyjątek od PDO też zostanie wychwycony(niby logiczne wiadomo) i praktycznie wszystko to mogę rozwiązać tylko

  1. catch(Exception $e) {
  2. $this->error(array('text' => $e->getMessage(), 'code' => $e->getCode())); //jak wyżej
  3.  


Czy mam jakoś kombinować i tworzyć n wyjątków na różne potrzeby czy inaczej powinienem to rozwiązać? sad.gif


--------------------
  1. echo 'I was trying';
  2. die ();
Go to the top of the page
+Quote Post
olszam
post 6.04.2015, 17:22:02
Post #2





Grupa: Zarejestrowani
Postów: 342
Pomógł: 23
Dołączył: 20.01.2011
Skąd: Chełm

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


Wywal drugiego catch-a i po sprawie a w miejsce pierwszego daj exception to wyłapie ci wszystko, jak chcesz mieć coś więcej niż kod z pdo. Nigdy się nie bawiłem by dawać n wątków chyba że kiedyś raz zrobiłem tak że jak wyłapie błąd to wykona inny wątek
  1. try{
  2. ////// jakiś tam kod
  3. }catch(Exception $e){
  4. try{
  5. /////jakiś tam inny kod
  6. catch(Exception $e){
  7. //// wyświetl błąd
  8. }
  9. }

coś na podstawie tego kiedyś robiłem ale to w sumie nie był mój pomysł by tak robić tylko profesor tak chciał, a kiedy takiego przykładu używać to sam nie wiem.

Ten post edytował olszam 6.04.2015, 17:22:58
Go to the top of the page
+Quote Post
Pyton_000
post 6.04.2015, 17:31:50
Post #3





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Tutaj musisz sobie sam określić poziom łapanych wyjątków. Albo chcesz wszystkie i zostawiasz Excepion albo tylko PDO.
Łapanie kilka wyjątków ma sens tylko gdy robisz inne akcje dla nich np. NotFoundException będzie robiło redirect 404 gdzieś tam, ale już WrongTokenException będzie Ci waliło np. 400 i fatal error w pysk.

Reasumując, zostaw sobie Albo albo.
Go to the top of the page
+Quote Post
Fred1485
post 6.04.2015, 17:39:13
Post #4





Grupa: Zarejestrowani
Postów: 361
Pomógł: 22
Dołączył: 10.02.2015

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


O akurat w tym przypadku czy błąd zwrócony przez pdo czy rzucony przeze mnie ma byc obsłużony tak samo wiec sobie zostawię tylko jeden blok catch. Dzięki koledzy

Ten post edytował Fred1485 6.04.2015, 17:39:57


--------------------
  1. echo 'I was trying';
  2. die ();
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: 19.04.2024 - 12:21