![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 44 Pomógł: 0 Dołączył: 30.04.2007 Skąd: WWA Ostrzeżenie: (0%) ![]() ![]() |
Witam, właśnie (od 2 dni) zacząłem swą "przygodę z programowaniem obiektowym" i na początek postanowiłem napisać sobie class'ę wczytywania modułów. Oto kod:
Problem w tym, że wywala mi błąd: Kod Warning: Module::require_once(../../modules/Article/) [function.Module-require-once]: failed to open stream: No such file or directory in C:\wamp\www\reiki\includes\classes\class.Modules.php on line 33 Fatal error: Module::require_once() [function.require]: Failed opening required '../../modules/Article/' (include_path='.;C:\php5\pear') in C:\wamp\www\reiki\includes\classes\class.Modules.php on line 33 Nie wiem czy błąd leży gdzieś w 'obiektowości' ($this, new Object itp.) czy może (oby) gdzieś w "zwykłym" kodzie PHP, tak czy inaczej - proszę o pomoc. Przy okazji prosiłbym o ocenę klasy - czy waszym zdaniem dobre podejście do problemu czy to tylko "strukturalny kod objęty w klasę" |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 896 Pomógł: 76 Dołączył: 15.11.2003 Skąd: Sosnowiec/Kraków Ostrzeżenie: (0%) ![]() ![]() |
A nie powinno być:
count zwróci Ci liczbę elemetów ale tablica jest indeksowana od zera, błąd jest stąd że przez to próbujesz includować plik, którego nie ma Ten post edytował Foxx 13.11.2007, 18:14:39 |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 24 Pomógł: 0 Dołączył: 8.07.2006 Ostrzeżenie: (0%) ![]() ![]() |
Blad podstawowy taki jak poprzednik napisal. Od siebie dodam, ze ta metoda nigdy Ci nie zadziala, jezeli bedzie w srodku wykonywania petli zwracac jakas wartosc (return) - bo return automatycznie konczy wykonywanie metody w tym przypadku przerywa takze wykonywanie petli.
Staraj sie udostepniac spojny interfejs uzytkownikom klasy i nie dawac im bezposredniego dostepu do skladowych klasy (zobacz hermetyzacja). Czyli dostep do skladowych jest mozliwy dzieki udostepnionemu interfejsowi, uzytkownika nie interesuje sposob implementacji. Osiagniesz to ustawiajac skladowe jako prawatne. W tym konkretnym przypadku powinno to sie odbywac przez metody akcesory (udostepnione publicznie): setModule(string $moduleName), setFilesPath(string $filesPath), setFilesArray(array $filesArray) itd. Moze to wydawac sie bez sensu ale oczywiscie nie jest go pozbawione. Np. gdybys chcial uniemozliwic wpisywanie znakow ./ ../ do nazw plikow za kazdym razem musialbys uruchamiac mechanizm sprawdzajacy/usuwajacy te znaki z ciagu a pozniej metode klasy ladujace dane pliki. Doszloby do powielania kodu a taki mechanizm mozesz zaimplementowac we wnetrzu klasy i masz pewnosc, ze ktos nie przypisze na sztywno nazw plikow zawierajacych te znaki. Mechanizm znajduje sie w jednym miejscu i jest wywolywany przy kazdej probie przypisania wartosci do skladowej. W Twojej klasie powinna byc mozliwosc dodania jednego pliku do listy (metoda dodaje do listy nazwe pliku), dodania ciagu (plik;plik - ta metoda powinna zajac sie parsowaniem ciagu do tablicy) albo samej tablicy (metoda dolacza tablice do tablicy plikow w klasie). Oddciazasz w ten sposob zadania metody loadModules. W setModule mozesz zaimplementowac od razu mechanizm sprawdzania czy plik istnieje i ewentualnie rzucac wyjatek. Jak widzisz same plusy z takiego podejscia do sprawy, zamiast udostepniania mozliwosci przypisywania wartosci do skladowych z zewnatrz - na sztywno. Mozesz takze pomyslec o dodaniu obslugi bledow - w PHP 5 - patrz wyjatki. Ten post edytował Helios 14.11.2007, 01:52:37 |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 77 Pomógł: 5 Dołączył: 29.03.2006 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
SPL i DirectoryIterator
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 23.08.2025 - 19:37 |