![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 4 655 Pomógł: 556 Dołączył: 17.03.2009 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
Klasa core, czyli klasa która będzie musiała zająć się ładowaniem potrzebnych klas i tworzenia ich egzemplarzy.
Wymyśliłem coś takiego:
Użycie:
To rozwiązanie jest troszkę podpatrzone z ZF ale ręcznie trzeba ładować zamiast automatycznie. ;p (jak to zrobili w ZF ?) Tylko klasy chciałbym podzielić np. na te do obsługi baz danych, grafiki, xml etc. |
|
|
![]()
Post
#2
|
|
Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
I jakie jest pytanie? (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
W sumie, to nic innego, jak trochę uwalony wzorzec registry... Skoro robisz klasę core, to po co ją instancjujesz, w jaki sposób z kontrolerów chcesz uzyskać do niej dostęp? Tworząc nową? |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 77 Pomógł: 27 Dołączył: 24.03.2002 Skąd: Tarnów Ostrzeżenie: (0%) ![]() ![]() |
Co do automagicznego ładowania, poczytaj o __autoload, bądź spl_autoload_register" title="Zobacz w manualu PHP" target="_manual.
Ten post edytował antyqjon 16.07.2009, 12:03:44 |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 4 655 Pomógł: 556 Dołączył: 17.03.2009 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
I jakie jest pytanie? (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) Jak zrobić podział klas na te do obsługi baz etc. W sumie, to nic innego, jak trochę uwalony wzorzec registry... Skoro robisz klasę core, to po co ją instancjujesz, w jaki sposób z kontrolerów chcesz uzyskać do niej dostęp? Tworząc nową? Zrobię jakiś singleton ;p Zmieniłem __get na taki:
I teraz mam automatyczne ładowanie ;p Co do automagicznego ładowania, poczytaj o __autoload, bądź spl_autoload_register" title="Zobacz w manualu PHP" target="_manual. Nie muszę czytać bo wiem co to jest i nie o to tutaj chodzi. Ten post edytował fifi209 16.07.2009, 12:05:12 |
|
|
![]()
Post
#5
|
|
Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
Cytat Jak zrobić podział klas na te do obsługi baz etc. A w czym problem...? Masz - powiedzmy - klasę db, która jest fabryką dla podklas... |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 4 655 Pomógł: 556 Dołączył: 17.03.2009 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
A w czym problem...? Masz - powiedzmy - klasę db, która jest fabryką dla podklas... Czy np. _load() mogłoby wyglądać o tak:
Działa, lecz jak ładować takim czymś klasy które są potomkami ? Czyli np. klasa która rozszerza funkcjonalność DB_MySQL nazywa sie DB_MySQL_Cos Napisać oddzielną metodę do ładowania potomków czy tą jakoś przerobić? (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) Ten post edytował fifi209 16.07.2009, 12:23:53 |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Hmmm... str_replace _ na / i dodać jeszcze .php czy .class.php i sprawdzić czy taki plik istnieje, jak tak to załadować go, sprawdzić czy istnieje tam deklaracja klasy (tu jej oryginalna nazwa) jeśli nie wywalić wyjątek?
Swoją drogą pomysł z tym by nazwa klasy wskazywała na jej lokalizację jest... dziwny |
|
|
![]()
Post
#8
|
|
Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
Nie lubię takich rozwiązań w postaci rozwalania nazwy klas i wtedy dołączanie plików. Aż mi się coś robi, po co marnować na takie pierdoły zasoby?
Cytat Działa, lecz jak ładować takim czymś klasy które są potomkami ? FACTORY... |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 4 655 Pomógł: 556 Dołączył: 17.03.2009 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
Swoją drogą pomysł z tym by nazwa klasy wskazywała na jej lokalizację jest... dziwny Nie lubię takich rozwiązań w postaci rozwalania nazwy klas i wtedy dołączanie plików. Aż mi się coś robi, po co marnować na takie pierdoły zasoby? Hmm, a jak Wy byście to rozwiązali? (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Po co marnować zasoby? Aby było wszystko ładnie i przejrzyście poukładane (nienawidzę burdelu przy projektach), wiadomo można wszystko do jednego folderu ale mając tam dziesiątki klas nie łatwo będzie się połapać mi a już nie wspomnę o kimś kto pierwszy raz ma to zobaczyć. ;p |
|
|
![]()
Post
#10
|
|
Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
Cytat Hmm, a jak Wy byście to rozwiązali? Już trzeci raz piszę... Wzorzec FACTORY. |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 4 655 Pomógł: 556 Dołączył: 17.03.2009 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 27 Pomógł: 0 Dołączył: 2.01.2005 Skąd: Opolskie Ostrzeżenie: (0%) ![]() ![]() |
Niestety - drugi raz nie zwróci Ci tego obiektu, bo dostaniesz: Cytat(Moja klasa Core) Notice: Undefined property: Core::$db in (...)/core.class.php on line 50 Notice: Undefined property: Core::$router in (...)/core.class.php on line 50 Notice: Undefined property: Core::$template in /(...)core.class.php on line 50 Notice: Undefined property: Core::$auth in (...)/core.class.php on line 50 Fatal error: Cannot redeclare class Auth in (...)/auth.class.php on line 4 Borykam się z tym od rana i nie skutkuje nic - ani zmiana zapisu
na , ani użycie tablicy zmiennych (Rejestr?) i funkcji array_key_exists() czy in_array() - odpowiednio modyfikując tablicę oczywiście, nic... Notice na razie pomijam, isset() zdaje się na nie działa, ale i tak krzyczy o niemożności redeklaracji funkcji, z czego wniosek, że parser najpierw inkluduje kod raz jeszcze, a dopiero później sprawdziłby wynik tego if-a (gdyby nie ten fatal error) (IMG:http://forum.php.pl/style_emoticons/default/blinksmiley.gif) |
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 4 655 Pomógł: 556 Dołączył: 17.03.2009 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
Niestety - drugi raz nie zwróci Ci tego obiektu, bo dostaniesz: Borykam się z tym od rana i nie skutkuje nic - ani zmiana zapisu
na , ani użycie tablicy zmiennych (Rejestr?) i funkcji array_key_exists() czy in_array() - odpowiednio modyfikując tablicę oczywiście, nic... Notice na razie pomijam, isset() zdaje się na nie działa, ale i tak krzyczy o niemożności redeklaracji funkcji, z czego wniosek, że parser najpierw inkluduje kod raz jeszcze, a dopiero później sprawdziłby wynik tego if-a (gdyby nie ten fatal error) (IMG:http://forum.php.pl/style_emoticons/default/blinksmiley.gif) Z tym core to był przykład, mam napisany widok podobnie mogę Ci pokazać jakbyś chciał. Mam tam ładowanie modułów i działa. (oczywiście na podobnej zasadzie co tu) |
|
|
![]()
Post
#14
|
|
Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
Cytat isset() zdaje się na nie działa, ale i tak krzyczy o niemożności redeklaracji funkcji, z czego wniosek, że parser najpierw inkluduje kod raz jeszcze, a dopiero później sprawdziłby wynik tego if-a (gdyby nie ten fatal error) Sprawdzasz to w klasie statycznej? |
|
|
![]()
Post
#15
|
|
Grupa: Zarejestrowani Postów: 27 Pomógł: 0 Dołączył: 2.01.2005 Skąd: Opolskie Ostrzeżenie: (0%) ![]() ![]() |
No byłbym wdzięczny, bo kombinuję jak przysłowiowy "koń pod górkę" i nic wymyślić nie umiem...
Znalazłem sposób, żeby przed użyciem include dać
i owszem, na fatala to pomogło, ale zdaje się, i tak tworzy mi się więcej tych obiektów... |
|
|
![]()
Post
#16
|
|
Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
Miałem pisać o class_exists" title="Zobacz w manualu PHP" target="_manual (nota bene, jest to szybsze niż użycie samego include_once" title="Zobacz w manualu PHP" target="_manual).
Cytat i owszem, na fatala to pomogło, ale zdaje się, i tak tworzy mi się więcej tych obiektów... Tworzy, czy załącza? |
|
|
![]()
Post
#17
|
|
Grupa: Zarejestrowani Postów: 27 Pomógł: 0 Dołączył: 2.01.2005 Skąd: Opolskie Ostrzeżenie: (0%) ![]() ![]() |
Załącony jest tylko raz (po tym if-ie), ale ta metoda jest wywoływana w jakiejś nieskończonej (na miarę możliwości zasobów serwera (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) ) pętli (IMG:http://forum.php.pl/style_emoticons/default/blinksmiley.gif) I wygląda to tak, jakby właśnie omijała ten warunek
i ładowała klasę kolejne razy... Właśnie to teraz analizuję, skąd się to wzięło. A ogólnie chodzi mi o to, że niektóre z bibliotek nie są wykorzystywane zawsze, a jednocześnie mogą być wymagane przez różne moduły, więc takie ładowanie na żądanie byłoby bardzo fajne - i jednocześnie pilnowanie (przez core) aby była tylko jedna ich instancja. === EDYTA === Już wiem, gdzie babola miałem - teraz działa (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Ten post edytował -SaraniS- 16.07.2009, 17:46:57 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 16.09.2025 - 16:31 |