Przeciążanie konstruktora |
![]() |
Wpisany przez Patryk yarpo Jar | |||
środa, 28 lipca 2010 12:26 | |||
Ktoś się może nawet oburzy, że o czym ja tu piszę. Przecież w PHP nie ma przeciążąnia znanego z C / Javy. Istnieje co prawda coś, co jest nazywane "przeciążaniem", jednak działa na innej zasadzie. Ja jednak nie znalazłem innej nazwy. No może "statyczne przeciążanie konstruktora". Zaraz postaram się wyjaśnić, o co mi chodzi. Na początek
Zwykła klasaOto kod zwykłej klasy, która obudowuje funkcję fopen: Spokojnie. Jestem świadomy, że powyższy kod nie jest idealny. Zaraz go zmienimy. Jak widać, podstawowe problemy:
To jest zły kod. ad 1: wstawienie drugiego parametru pozwoli po raz kolejny na błędy. Niech się komuś zdarzy pomyłka i zamiast 'w+' da 'e+'... To się może zdarzyć. Najprowdopodobniej dodatkowo zdarzy się to w miejscu, gdzie nikt nie zauważy, bo rzadko tamten kod jest wywoływany. Ten bug ujawni się w wigilię, gdy będziesz zasiadał do kolacji, a klient właśnie będzie chciał uruchomić nową promocję... Dodatkowym problemem jest to, że nie sprawdzam, czy plik w ogóle istnieje. Należy to jakoś załatać.
Propozycja rozwiązaniaByć może lepiej jest mieć kilka konstruktorów. Czy nie byłoby dobrze, móc zrobić tak:
Możemy oczywiście zrobić nową klasę o takiej nazwie, która by dziedziczyła po File. Ja chciałbym jednak zaproponować coś innego.
"Przeciążanie" konstruktorów
Może krotko wyjaśnię ideę:
Oczywiście powyższy kod wymagałby jeszcze poprawek. Przecież fopen wcale nie musi utworzyć pliku [za mało miejsca na dysku, brak uprawnień, setka innych powodów, których nie umiemy sobie wyobrazić]. Jednak tu chciałem pokazać pewną ideę, a nie cały gotowy system. Zapraszam do testowania. Jeśli ktoś byłby zainteresowany, to udostępniam kolejne kroki jak przechodziłem od kodu nr 1 do ostatecznego:
|