![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 663 Pomógł: 6 Dołączył: 3.06.2007 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Skoro po kilku konsultacjach doszedłem do wniosku, że jednak nie warto stosować tablicy $GLOBALS do przechowywania ustawień witryny zaczałem pisać klasę settings
![]()
Chciałbym teraz wczytać do tablicy '$tablica' zmienne z pliku 'settings.ini' który wyglądał będzie tak: Kod db_name = nazwa_bazy db_host = nazwa_hosta itd... Pierwsze pytanie: -- Czy istnieje jakaś fajna funkcja która wczyta za mnie zmienne z pliku .ini? Może ktoś ma i mógłby mi wkleić? (znalazłem już dlatego pytanie jest nieważne - funkcja $ini = parse_ini_file('file.ini'); ) -- Chciałbym jednak zapytać czy uważacie że to dobry (albo zły) sposób na napisanie takiej klasy. Pytam bo nie chce juz tego poprawiać więcej ![]() Drugie pytanie dotyczy posta którego nie mogę teraz odnaleźć ale pisało w nim, że: Cytat (..)metody magiczne zaciemniają kod(..) -- Czy powinienem unikać metody magicznej? Muszę przyznać, że w tym wypadku znacznie poprawiłaby ona czytelność kodu. Ten post edytował Black-Berry 20.02.2008, 13:05:21 -------------------- http://www.berry.nazwa.pl/edico/public_html/index.php ----> under construction
|
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 875 Pomógł: 122 Dołączył: 2.02.2008 Ostrzeżenie: (0%) ![]() ![]() |
-- Czy istnieje jakaś fajna funkcja która wczyta za mnie zmienne z pliku .ini? Może ktoś ma i mógłby mi wkleić? Masz bana na manuala...? parse_ini_file" title="Zobacz w manualu PHP" target="_manual |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 663 Pomógł: 6 Dołączył: 3.06.2007 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Sory pospieszyłem się z tym pytaniem ale chodzi mi teraz o bardziej ogólne pytanie o opinię na temat tego sposobu.
-------------------- http://www.berry.nazwa.pl/edico/public_html/index.php ----> under construction
|
|
|
![]()
Post
#4
|
|
Grupa: Przyjaciele php.pl Postów: 7 494 Pomógł: 302 Dołączył: 31.03.2004 Ostrzeżenie: (0%) ![]() ![]() |
Lepiej zrobisz jak odziedziczysz po ArrayObject. Dostaniesz gratis funkcję ArrayObject::offsetGet(), dzięki której wszystko zrobisz bardziej elastycznie i bardziej elegancko.
Co to jest klasa main_object i dlaczego po niej dziedziczą wszystkie inne? |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 663 Pomógł: 6 Dołączył: 3.06.2007 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
racja @mike. Klasa settings nie musi dziedziczyć po żadnej. (Mój bład) Klasa "settings" wchodzi w skłąd klasy "main_object" jako singleton. Po main_object dziedziczą wszystkie inne klasy dzięki temu mamy główny węzeł dla całego systemu.
-------------------- http://www.berry.nazwa.pl/edico/public_html/index.php ----> under construction
|
|
|
![]()
Post
#6
|
|
Grupa: Przyjaciele php.pl Postów: 7 494 Pomógł: 302 Dołączył: 31.03.2004 Ostrzeżenie: (0%) ![]() ![]() |
Po main_object dziedziczą wszystkie inne klasy dzięki temu mamy główny węzeł dla całego systemu. Coooooo? Wyrzuć to do kosza. Natychmiast!Splatch’s devblog :: Singleton Antywzorzec projektowy |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 663 Pomógł: 6 Dołączył: 3.06.2007 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
o matko znowu od nowa... a było juz tak pięknie
![]() -------------------- http://www.berry.nazwa.pl/edico/public_html/index.php ----> under construction
|
|
|
![]()
Post
#8
|
|
Grupa: Przyjaciele php.pl Postów: 7 494 Pomógł: 302 Dołączył: 31.03.2004 Ostrzeżenie: (0%) ![]() ![]() |
Noc chyba, że źle zrozumiałem.
Jeśli u Ciebie każda klasa (lub większość) jest singletonem to ja na zawał padnę ![]() |
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 663 Pomógł: 6 Dołączył: 3.06.2007 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Na zawał to o mało ja nie padam teraz
![]() Nie wszystkie. W zasadzie tylko kilka. Jest tak: --main_object // klasa główna po której dziedziczą inne ---- db_driver() // singleton ---- settings() // to tez miałem nadzieję zrobić jako singleton ---- db_functions // konkretne zapytania do bazy opakowane w funkcje tez jako singleton nowy obiekt tworzę tak: class news extends main_object Co ja zrobię bez singletona? ![]() -------------------- http://www.berry.nazwa.pl/edico/public_html/index.php ----> under construction
|
|
|
![]()
Post
#10
|
|
![]() Grupa: Moderatorzy Postów: 4 465 Pomógł: 137 Dołączył: 26.03.2004 Skąd: Gorzów Wlkp. ![]() |
1. Nie wpadać w panikę
2. Zainwestować w książkę 3. Ukorzyć się przed wielkim OOP ;p -------------------- To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness; chaotic, confused, vulnerability, to inform yourself. Think for yourself. Question authority. |
|
|
![]()
Post
#11
|
|
![]() Grupa: Zarejestrowani Postów: 663 Pomógł: 6 Dołączył: 3.06.2007 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
1. Nie wpadać w panikę 2. Zainwestować w książkę 3. Ukorzyć się przed wielkim OOP ;p dzieki za radę ale jakoś nie czuję się mądrzejszy po niej ![]() -------------------- http://www.berry.nazwa.pl/edico/public_html/index.php ----> under construction
|
|
|
![]()
Post
#12
|
|
![]() Grupa: Moderatorzy Postów: 4 465 Pomógł: 137 Dołączył: 26.03.2004 Skąd: Gorzów Wlkp. ![]() |
No co? ;p Pierwsze 2 punkty są zupełnie na poważnie. W moim odczuciu wpadasz w panikę i miotasz się, bo chcesz wszystko od razu mieć naj. Tak się nie da, bo konsekwencje odczujesz dopiero, gdy zaczniesz tego używać. Pomyśl o tym jak o żywym organiźmie. Mózg sam nic nie robi, tylko wydaje polecenia za pośrednictwem połączeń nerwowych. Tak samo od nich odbiera sygnały. Każdy singleton to jak połączenie oddzielnym kanałem nerwowym, który omija wszystkie inne i cholera wie, jakie informacje tam idą.
-------------------- To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness; chaotic, confused, vulnerability, to inform yourself. Think for yourself. Question authority. |
|
|
![]()
Post
#13
|
|
![]() Grupa: Zarejestrowani Postów: 663 Pomógł: 6 Dołączył: 3.06.2007 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Mi tylko chodzi o to żebym mógł w klasach stosować proste odwołanie do settings. Singleton dobrze sie do tego nadawał:
a co do mojej potzreby "idealności" to naprawde zależy mi na ostatecznym rozwiązaniu. Już nie mam siły tego przepisywać co pół roku. Muszę jeszcze napisać newslettery, file_menagera, sondę i mase innych a nie mogę wyjść z jądra systemu. ![]() Ten post edytował Black-Berry 20.02.2008, 15:15:22 -------------------- http://www.berry.nazwa.pl/edico/public_html/index.php ----> under construction
|
|
|
![]()
Post
#14
|
|
![]() Grupa: Zarejestrowani Postów: 793 Pomógł: 32 Dołączył: 23.11.2006 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Wiesz jaki kod piszemy jest zależne od tego co umiemy, jak ktoś się ciągle rozwija to będzie ciągle zmieniał to co kiedyś napisał.
Co do settings i singletona, to przecież i tak w konkretnym miejscu pobierasz te dane i tam też je możesz przekazać do innych obiektów które je potrzebują, że to są startowe informacje tylko raz musisz je przekazać, więc na prawdę używanie singletona jest w tym przypadku niepotrzebne. Bo chyba masz w jednym miejscu wczytywanie konfiguracji? Bo jak będzie rozrzucona to będzie właśnie problem z tym "a gdzie to ja tego używam", dlatego singleton jest antywzorcem. -------------------- Algorytmy w PHP, czy ktoś o tym słyszał?
Dlaczego tak mało kobiet programuje? ponieważ nie zajmują się głupotami. |
|
|
![]()
Post
#15
|
|
![]() Grupa: Zarejestrowani Postów: 663 Pomógł: 6 Dołączył: 3.06.2007 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
@Sedziwoj Trochę nie radzę sobie z tym zadaniem. Mógłbyś mi doradzić?
Tak więc mam główną klasę po której dziedziczą inne. Zawiera ona 2 odwołania do singletonów. Tworząc nową klasę np news dziedziczę po main
Jak mam to robić inaczej ? Sugerujesz, że powinienem przekazywać obiekt $settings do konstruktora object_news ? To strasznie niewygodne. -------------------- http://www.berry.nazwa.pl/edico/public_html/index.php ----> under construction
|
|
|
![]()
Post
#16
|
|
![]() Grupa: Moderatorzy Postów: 4 465 Pomógł: 137 Dołączył: 26.03.2004 Skąd: Gorzów Wlkp. ![]() |
Wygoda jest tu na drugim miejscu. Co ma klasa News wspólnego konfiguracją Twojego systemu? Nic, a przynajmniej bardzo niewiele.
Powinieneś przekazać jej tyle danych, ile jest jej potrzebne. Nawet przekazanie obiektu $settings jako parametr w konstruktorze jest kontrowersyjne, choć lepsze niż dziedziczenie po jakimś dziwnym obiekcie. W idealnym przypadku powinieneś posiadać dodatkową klasę NewsManager/NewsBase/NewsHelper/NewsVendor/CoTamChcesz, która się zajmie rozmową z resztą systemu. Możesz wykorzystać coć na podobieństwo wzorca Prototype/Fabryki obiektów.
Omijasz w ten sposób te niedogodności. Pozdrawiam. -------------------- To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness; chaotic, confused, vulnerability, to inform yourself. Think for yourself. Question authority. |
|
|
![]()
Post
#17
|
|
Grupa: Przyjaciele php.pl Postów: 7 494 Pomógł: 302 Dołączył: 31.03.2004 Ostrzeżenie: (0%) ![]() ![]() |
Ja mam tylko taką uwagę:
Wiesz jaką funkcję (między innymi) pełnią wzorce projektowe? Wprowadzają ujednolicenie nomenklatury i standardy. Jednym z największych plusów jest to, że jak mówię komuś innemu, nawet na końcu globu (nie kojarzyć z globals ![]() A czemu to mówię? Bo Twoja klasa main_object to taki Context i tego raczej się trzymaj. Gdybyś nie podał ostatniego listingu to wiele osób nadal mogłoby nie wiedzieć czym u licha jest to Twoje main_object. Już sama nazwa jest nie bardzo bo prędzej powinno być: main_class. A teraz uwaga! Polecam najlepsze książki do nauki wzorców dla PHP: php|architect's Guide to PHP Design Patterns, J2EE. Wzorce projektowe, Java. Wzorce projektowe |
|
|
![]() ![]() |
![]() |
Aktualny czas: 19.08.2025 - 17:59 |