Try i catch w obiektówce

Odpowiedz Nowy wątek
2019-06-10 20:28
0

Witam czy try i catch używa sie w metodach ? Np jeśli np $liczba jest wieksza od 2 to rzucamy wyjatek i lapiemy w metodzie ?

Pozostało 580 znaków

2019-06-10 20:31
1

Tak, jeżeli ma to sens. Np. robisz ValueObject i jesteś pewny, że nie powinna tam trafić wartość większa od 2, wtedy rzucasz wyjątek żeby mieć pewność, że taki obiekt nie zostanie utworzony, możesz też podobnie zrobić w metodzie.

edytowany 1x, ostatnio: Markuz, 2019-06-10 20:32

Pozostało 580 znaków

2019-06-10 20:32
1

Taka prosta metoda nie będąca częścią kontrolera i procesu przetwarzania żądania HTTP, raczej powinna po prostu rzucać wyjątek, a obsługę tego wyjątku powinieneś robić na jak najwyższym poziomie w kontrolerze. Inaczej, w samej metodzie musisz zadecydować co dalej po wystąpieniu wyjątku, a to najcześciej oznacza wykroczenie poza kompetencje danej metody. Metoda ma coś liczyć, a nie decydować, co się dzieje po wystąpieniu błędu. Jeżeli występuje błąd, po prostu rzuca wyjątek i przekazuje kompetencje dalej/wyżej.


edytowany 3x, ostatnio: TomRZ, 2019-06-10 20:34

Pozostało 580 znaków

2019-06-10 20:34
0

To jak tutaj dodać try i catch, aby to było dobre ? https://gist.github.com/kamil[...]bd7a315bbd59eb240b79f367fadf5

Pozostało 580 znaków

2019-06-10 20:35
0

W tym jak to napisałeś, to powinien to łapać skrypt, a sama klasa i jej metody powinny rzucać tylko wyjątek. W tym przykładzie to skrypt jest tym kontrolerem.


edytowany 1x, ostatnio: TomRZ, 2019-06-10 20:35

Pozostało 580 znaków

2019-06-10 20:39
0

Czyli to jest źle ? Mógłbyś mi poprawić na wskazówkę ?:D

Pozostało 580 znaków

2019-06-10 20:41
0

Gdzie jest źle, w przykładzie nie masz nigdzie try / catch zrobionego.


Pozostało 580 znaków

2019-06-10 20:41
1

Niedawno był podobny wątek (to akurat link na przykład jak NIE pisać wyjątków, przeczytaj całość).

edytowany 1x, ostatnio: Delor, 2019-06-10 20:43
i teraz w każdym wątku mnie straszą inne wyjątki :( - Miang 2019-06-10 22:50

Pozostało 580 znaków

2019-06-10 20:49
0

Tom wiem bo nie wiem gdzie dać :D

Pozostało 580 znaków

2019-06-10 22:56
0

a jakby parametr $value zadeklarować jako bool?

Pozostało 580 znaków

2019-06-11 08:31
0

@Miang: zgadzam się z Tobą. Wg mnie wątki tutaj to przesada. Raz, że można to załatwić za pomocą języka a dwa, że to IMO nie kwalifikuje się na wyjątek :)

W takich przypadkach funkcja offsetSet mogłaby zwracać boola. Ułatwia to trochę kodzik (bez dziwnych przeskoków w wykonaniu)

if (!$p->offsetSet()) {
   // bla bla, obsługa błędu
}

// dalsze wykonanie

Dla mnie wyjątek to informacja: "zjechało się" i oznaka, że program nie może dalej działać poprawnie.
Przykład - Dokonywania płatności:

  • klient nie ma wystarczająco kasy na koncie - zwykły błąd
  • nie można dokonać płatności bo PayPal padł - to już wyjątek

czyli to co jest w obrębie poprawnego flow programu winno zwracać informację czy się udało czy nie. Wyjątek jest jak np - baza padnie.

edytowany 1x, ostatnio: no_solution_found, 2019-06-11 10:11
jest coś takiego jak sterowanie flow wątkami, ale nie jestem jej wielkim fanem :) - no_solution_found 2019-06-11 08:31
Wątek czy wyjątek? - Delor 2019-06-11 10:09
oczywiście wyjątek - dzięki, poprawiłem :) - no_solution_found 2019-06-11 10:11
Ale offsetSet wynika z implementacji phpowego interfejsu ArrayAccess. Gdzie tam w ogóle miejsce na rzucenie wyjątkiem? - ccwrc 2019-06-16 17:15
sam offset nie, ale już w dodatkowej logice i owszem - no_solution_found 2019-06-16 19:36

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0