Post
#1
|
|
|
Grupa: Zarejestrowani Postów: 371 Pomógł: 18 Dołączył: 23.11.2008 Ostrzeżenie: (0%)
|
Witam. Rozpocząłem żmudne zagłębianie się w tajniki programowania zorientowanego obiektowo, przeczytałem kilka artykułów i pomyślałem że najlepiej jest sprawdzić swoją wiedzę w praktyce. Tak oto powstała klasa do uploadu plików. Przyznam się, że pobrałem sobie podobną klasę z phpclasses.org, aby zobaczyć mniej więcej jak to wygląda. Chciałbym Was zapytać czy ma to coś w ogóle wspólnego ze stylem OOP ?
class.upload.php
index.php
Mam co do tego pytania : 1) Wiem że w stylu OOP są wyjątki. Czy to, jak ja je zastosowałem to odpowiednia metoda? Czy jest ich za dużo ? Bo mi nie pasują za bardzo ... 2) Czy wyjątki powinno się dawać do udanych operacji ? 3) Czy w konstruktorze wykonywać metodę 'upload' czy odwołać się do niej poza konstruktorem, już w pliku index? 4) Jeśli mam operacje na bazie danych bądź plikach tekstowych to czy tworzyć destruktor do ich zamykania ? To takie ogólne pytania i byłbym bardzo wdzięczny gdyby ktoś mi to 'sprawdził', wytknął błędy i polecił dobrą literaturę (IMG:style_emoticons/default/smile.gif) Dziękuję i pozdrawiam. Ten post edytował Mefiuu 3.08.2011, 20:46:10 |
|
|
|
![]() |
Post
#2
|
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%)
|
Na początek dwie ogólne uwagi:
1. Nie mieszaj języków (patrz: wywal polskie indeksy tablic). Angielski jest jedynym słusznym w takim miejscu. (IMG:style_emoticons/default/wink.gif) 2. Nigdy nie doprowadzaj do czegoś takiego: Tyle poziomów zagłębień to koszmar przy późniejszej pracy. Niemal zawsze da się to zamienić na coś w stylu: Pamiętaj, że wyrzucenie wyjątku przerywa wykonywanie bloku TRY. Co do Twoich pytań: 1. Nie jest ich za dużo. W każdym miejscu gdzie występuje błąd, który wystąpić nie powinien masz prawo, a wręcz obowiązek skorzystać z wyjątku. 2. Nie. 3. Nie powinieneś. Konstruktor służy przygotowaniu obiektu do pracy, nie wykonywaniu samej pracy. 4. To zależy. Jeżeli plik jest otwarty na przestrzeni "działania obiektu" to w destruktorze dobrze byłoby upewnić się, że plik zostanie zamknięty. Przy czym raczej powinna być osobna metoda do zamknięcia, użytkownik powinien zawsze ręcznie ją wywoływać, a destrukor mógłby co najwyżej w ostateczności zamykać. Coś w ten deseń:
I jeszcze kilka uwag: 1. Nazwa klasy powinna być rzeczownikiem, np. Uploader. Tworząc obiekt (new) tworzysz jakiś byt, a następnie każesz owemu bytowi wykonywać jakieś akcje, np. wgrać coś ($uploader->uploadSomething()) dlatego też nazwy metod powinny być czasownikami. Kod jest wtedy bardziej logiczny. 2. W PHP5 nie ma czegoś takiego jak "var". Masz trzy modyfikatory zasięgu: private, protected, public i to z nich powinieneś korzystać. 3. Nigdy nie powinieneś korzystać ze stanu globalnego (patrz $_POST, $_FILES). Te dane powinny zostać przekazane do obiektu z zewnątrz. 4. Akurat na kod błędu (1..7) masz ładne stałe, które są bardziej wymowne niż jakiś numerek. 5. Nigdy nie powinieneś mieć w kodzie takiej klasy żadnego ECHO. Jest błąd? To wywalasz wyjątek. Jakaś inna część aplikacji może go przechwycić i zrobić coś pożytecznego z nim (jak chcociażby wyświetlenie informacji użytkownikowi). 6. Nigdy nie stosuj bezpośrednio klasy Exception. Jest zbyt ogólna. Użyj bardziej wyspecjalizowanego typu. A jeżeli w SPL-u nie ma odpowiedniego, stwórz własny. 7. Jak już przechwytujesz wyjątek (blok CATCH) zrób z nim coś pożytecznego. Wyświetlenie treści wyjątku nie jest czymś takim. Co najwyżej całą aplikację możesz objąć blokiem TRY .. CATCH i tutaj wyświetlenie treści błędu ma sens - bo oznacza to, że aplikacja się wysypała i nic już nie da się zrobić. |
|
|
|
Mefiuu [php]Początki OOP 3.08.2011, 20:42:33
konole Tak na początek: najlepiej, jeśli klasa nie zwraca... 3.08.2011, 21:05:58
Mefiuu czyli rozumiem że wyłapywać w index? Ale nie bardz... 3.08.2011, 21:08:04
Spawnm $_FILES['plik']['error'] - i ... 3.08.2011, 21:22:16
Mefiuu Bardzo dziękuję za odpowiedzi i pomoc ! Crozin... 4.08.2011, 13:47:48
Crozin CytatMam teraz kolejne pytanie, czy poprawnie zost... 4.08.2011, 14:27:31
Mefiuu Dziękuję, chyba jak na razie poprawiłem znacząco m... 4.08.2011, 19:40:54 ![]() ![]() |
|
Aktualny czas: 25.12.2025 - 15:44 |