Używanie Exceptionów a typowanie |
Używanie Exceptionów a typowanie |
31.12.2018, 14:04:37
Post
#1
|
|
Grupa: Zarejestrowani Postów: 898 Pomógł: 48 Dołączył: 2.11.2005 Skąd: Poznań Ostrzeżenie: (0%) |
Ostatnio ciekawi mnie temat używania Exceptionów - muszę przyznać, że trochę słabo to czuję. Kiedyś Exception stosowałem do rzeczy, które po prostu mogły spowodować niedziałanie aplikacji - np. brak dostępu do pliku czy coś podobnego. Ostatnio jednak widzę, że coraz częściej w nowych bibliotekach Exceptiony stosuje się w inny sposób tj. do wymuszenia typowania metody bez zwracania NULL.
Np taka klasa:
Pierwsza metoda (podejście o którym mówię) nigdy nie zwraca nulla, tylko obiekt lub rzuca wyjątek. Druga metoda (tradycyjna) zwraca obiekt lub null. Które podejście stosujecie? Dlaczego. Ja po rozmowie z kolegą zacząłem skłaniać się ku pierwszej wersji i brak możliwości zwrócenia oczekiwanego obiektu traktuję jako wyjątek.Podświadomie wydaje mi się to bardziej logiczne i wymusza trochę więcej dyscypliny. |
|
|
3.01.2019, 17:19:27
Post
#2
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) |
Co do race condition to przypomniała mi się moja dyskusja z kolegą z teamu.
Realizował on upload pliku CSV. Po wgraniu pliku sprawdzał mime i filesize. Była sobie metoda z typehint Kod function validateFilesize(int $filesize); a kod który ją wywoływał: [code]if(!is_uploaded_file($file)) die; $validator->validateFilesize(filesize($file));[code] Problem polegał na tym że `filesize()` może zwrócić również false i warning. Nie docierało do niego że powinien sprawdzić czy filesize !== false. On na to że nie musi bo skoro plik się poprawnie wysłał na serwer to i na pewno zwróci rozmiar. Nie docierał argument że pomiędzy sprawdzeniem czy plik się wysłał a sprawdzeniem rozmiaru może stać się cokolwiek. Skoro ludzie od PHP wstawili false to po coś to jest? A może to ja się czepiałem ? (chodziło też o to że PHPStan z lvl = max się czepiał tego zapisu) |
|
|
Wersja Lo-Fi | Aktualny czas: 28.04.2024 - 11:11 |