![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 1 168 Pomógł: 126 Dołączył: 5.02.2010 Skąd: Świdnica Ostrzeżenie: (0%) ![]() ![]() |
Witam,
wiem, że za pomocą extract($array) jestem w stanie stworzyć zmienne, a więc takie coś jak poniżej mi zadziała.
Lecz jak zrobić to tak żeby zmienne z extract weszły mi pod public $array czyli otrzymałbym coś takiego
Najlepiej chciałbym mieć możliwość stworzenia czegoś na wzór powyższego z dynamicznym tworzeniem zmiennych, ale w klasie statycznej tj:
Teraz z innej klasy chciałbym mieć do tego dostęp tj:
Da się to jakoś zrobić? Wiem, że się trochę rozpisałem, ale mam nadzieję, że jest to w jakimś stopniu zrozumiałe. Pozdrawiam, Szymon |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Ale po co tworzyć takiego paskudnego potworka, jak można utworzyć sobie prosty obiekt-kontener*, który będzie robił to samo, ale o wiele lepiej? Bo co za różnica czy napiszesz sobie:
(pomijając fakt, że pierwsze rozwiązanie ma same wady, a drugie kilka sporych zalet). * na dobrą sprawę, można sobie nawet rozszerzyć ArrayAccess, żeby uniknąć powielania istniejącego kodu. EDIT: Drobna "literówka" się wkradła w post. (IMG:style_emoticons/default/wink.gif) EDIT2: Oczywiście to drugie rozwiązanie jest lepsze. Ten post edytował Crozin 9.04.2013, 10:41:48 |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 2 148 Pomógł: 230 Dołączył: 26.03.2008 Ostrzeżenie: (0%) ![]() ![]() |
Tworzysz zmienną główną:
Następnie dodajesz __get i __set
Potem dodajesz swoje funkcje ładujące, które dodają dane do $_data, a potem się odwołujesz. Przykład:
// ADD (pomijając fakt, że drugie rozwiązanie ma kilka sporych zalet, a drugie samo wady). (IMG:style_emoticons/default/facepalmxd.gif) Ten post edytował pyro 9.04.2013, 10:22:05 |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 1 168 Pomógł: 126 Dołączył: 5.02.2010 Skąd: Świdnica Ostrzeżenie: (0%) ![]() ![]() |
Tylko teraz pytanie jak z utrzymaniem tych danych? Skoro zrobię w Start.php instancję tej klasy i uruchomię ładowanie pliku, a później gdzieś indziej będę chciał wykorzystać te zmienne czyli np. w klasie Logout czyli praktycznie na samym końcu... Jak znowu stworzę instancję tej klasy i dane będą zapisane, to super, ale co wtedy z wydajnością? Może trochę głupie pytania, nie mam za bardzo, gdzie teraz tego sprawdzić. Dopiero w domu. |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
1. Wywal metody __get()/__set() na rzecz normalnych get()/set(). Obecne rozwiązanie nie przynosi Ci absolutnie żadnej korzyści, a tworzy kilka idiotycznych problemów oraz zmniejsza czytelność kodu.
2. Raz utworzony obiekt przekazujesz sobie tam gdzie go potrzebujesz - Google: dependency injection. Chociaż taki obiekt jak "Logout", raczej nie będzie potrzebował zależności do całego obiektu konfiguracji. Ten post edytował Crozin 9.04.2013, 10:40:41 |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 1 168 Pomógł: 126 Dołączył: 5.02.2010 Skąd: Świdnica Ostrzeżenie: (0%) ![]() ![]() |
1)
index.php
logout.php
Config.php
2) Co do dependency injection mam zamiar się wziąć powoli i tak ogólnie za wzorce projektowe, aczkolwiek nie wiem kiedy znajdę chwilę na to, bo matura niedługo. Takie coś już jest dobrze wg Ciebie Crozin? Ten post edytował Szymciosek 9.04.2013, 10:52:57 |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Cytat Co do dependency injection mam zamiar się wziąć powoli i tak ogólnie za wzorce projektowe, aczkolwiek nie wiem kiedy znajdę chwilę na to, bo matura niedługo. Dependency Injection i inne podstawy OOP w 45 sekund:1. Obiekt w miarę możliwości nie powinien odwoływać się do niczego co pochodzi spoza jego samego, tj. żadnych zmiennych globalnych czy odwołania do innych klas (patrz: Config::getInstance() czy zapisanie nazw plików wewnątrz klasy). 2. Biorąc sobie do serca punkt pierwszy, musimy dojść do wniosku, że wszelkie zależności muszą być przekazane przez argumenty metod. 2.1. Jeżeli jakaś zależność jest niezbędna do działania obiektu, powinna być przekazana już w konstruktorze. 2.2. Jeżeli jakaś zależność jest opcjonalna można dla niej utworzyć osobnego settera. 3. Każdy obiekt zajmuje się jedną rzeczą (czyli taki obiekt Config nie bawi się już w rozpoznawanie czy pracuje w środowisku produkcyjnym czy deweloperskim). 4. Gdzie się tylko da unikamy static (tutaj nie ma żadnej przesłanki sugerującej konieczność skorzystania z tego). 5. Dbamy o obsługę błędów (metoda get() powinna rzucić wyjątek InvalidArgumentException w przypadku odwołania się do nieistniejącego klucza). Oczywiście nie są to jakieś nienaruszalne zasady, ale jeżeli je łamiesz musisz to robić świadomie i umieć sobie odpowiedzieć dlaczego warto je łamać. |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 1 168 Pomógł: 126 Dołączył: 5.02.2010 Skąd: Świdnica Ostrzeżenie: (0%) ![]() ![]() |
3. Czyli powinienem mieć osobną klasę do rozpoznania środowiska na wzór np.
i teraz w Config
5. To jest właśnie to, gdzie pewnie w wielu przypadkach brakuje i chyba wezmę to sobie do serca i poćwiczę jeszcze coś takiego. Wrócę do tego później, bo za 13min jest dzwonek i koniec lekcji przy komputerze. Dziękuję Ci bardzo za te rady - jeszcze popatrzę na przykłady DI. Ale chyba Config jeszcze może zająć się ładowaniem konkretnego pliku konfiguracyjnego? |
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 20:31 |