Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Dwie klasy i zapętlający się kod
Forum PHP.pl > Forum > PHP
starach
Witam.
Mam dwie klasy. Pierwsza potrzebuje drugiej żeby działać a druga potrzebuje pierwszej żeby działać.
Na swoją zgubę przyjąłem zasadę że deklaracje klas robie w konstruktorach.
Kod się zapętla a ja nie za bardzo mam pomysł co z tym zrobić.
Klasami są klasa konfiguracyjna Config i klasa obsługująca zdarzenia Event.
Myślałem czy by nie zrobić z metody trigger w klasie Event metody statycznej,
ale zrobi się bałagan w kodzie bo co chwila będę musiał używać self:: macie jakiś pomysł co z tym zrobić ?
Cysiaczek
Dziwny problem. Użyj include_once() - php samo powinno sobie poradzić.

Pozdrawiam.
Kocurro
Singleton ?
starach
  1. <?php
  2. class Klasa_pierwsza
  3. {
  4. var $objekt_klasa_druga;
  5. function Klasa_pierwsza()
  6. {
  7. $this->objekt_klasa_druga = new Klasa_druga;
  8. }
  9. }
  10. class Klasa_druga
  11. {
  12. var $objekt_klasa_pierwsza;
  13. function Klasa_druga()
  14. {
  15. $this->objekt_klasa_pierwsza = new Klasa_pierwsza;
  16. }
  17. }
  18. ?>

Teraz jasne o co chodzi ?
Tyle tylko że u mnie w wywoływaniu klasy pośredniczy funkcja która zwraca referencje do utworzonego obiektu klasy.
dr_bonzo
Eeee, blad w projekcie? Nie mozesz tego inaczej zaprojektowac?
starach
Rozważam przerobienie metody klasy event ( trigger ) na statyczną rozwiązało by to problem ale nie lubie metod statycznych,
bo kod się przez to kiepsko czyta. A jak na razie mój framework wygrywa głównie dzięki czytelności kodu :|
Cysiaczek
Ale czytelności silnika, czy API? Bo jeśli to silnik, to czytelność jest drugorzędna względem wydajności i rozszerzalności.

Pozdrawiam
starach
Jeśli idzie o obsługę zdarzeń to chyba mówimy zdaje się o API.
Jako że całość ma budowę modułową, a po publikacji rzeczonego FW,
ktoś możliwe że będzie chciał zobaczyć jak zaimplementowałem obsługę zdarzeń.
Oprócz tego modyfikowanie tego elementu też będzie 'upierdliwe',
bo samo użycie to zmieni się tylko z
$event = //pobranie klasy
$event->trigger('identyfikator');
na
Event::trigger('identyfikator');
Może szukam kwadratowych kół, ale mam po prostu jakąś niechęć do używania metod statycznych.

edit>
Rozwiążę sprawę w taki sposób że po prostu przeniosę funkcjonalność klasy Config,
do klasy Event która sama będzie ładowała swoją konfigurację bez pośrednictwa w.w. klasy.
Kocurro
Ehh ... a wystarczy uzyc singletona ...
starach
Cytat(Kocurro @ 17.11.2007, 15:03:33 ) *
Ehh ... a wystarczy uzyc singletona ...
Ehh ... a wystaczy czytać ze zrozumieniem.
dr_bonzo
Cytat
Mam dwie klasy. Pierwsza potrzebuje drugiej żeby działać a druga potrzebuje pierwszej żeby działać.
Na swoją zgubę przyjąłem zasadę że deklaracje klas robie w konstruktorach.
Kod się zapętla a ja nie za bardzo mam pomysł co z tym zrobić.


O, matko!

Albo wyrzucasz inicjacje drugiej klasy z konstruktora
albo robisz tak zeby nie byly od siebie nawzajem zalezne.


np

  1. <?php
  2. $a = new A();
  3. $b = new B( $a );
  4. ?>


czy podobnie, lub zupelnie inaczej
starach
doktorku to tylko tak ładnie w teorii wygląda w praktyce jest trochę trudniej.
Nie chcę wywalać deklaracji z konstruktora bo to rozwala mi całkowicie zasadę którą przyjąłem.

Ale tak jak napisałem klasa Event sama wczytuje swój plik konfiguracyjny,
bo w jej przypadku nie trzeba stosować trochę bardziej skomplikowanej metody którą użyłem w klasie Config
i wszystko śmiga tak jak powinno.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.