starach
17.11.2007, 11:09:08
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
17.11.2007, 11:25:03
Dziwny problem. Użyj include_once() - php samo powinno sobie poradzić.
Pozdrawiam.
Kocurro
17.11.2007, 11:28:02
Singleton ?
starach
17.11.2007, 12:11:53
<?php
class Klasa_pierwsza
{
var $objekt_klasa_druga;
function Klasa_pierwsza()
{
$this->objekt_klasa_druga = new Klasa_druga;
}
}
class Klasa_druga
{
var $objekt_klasa_pierwsza;
function Klasa_druga()
{
$this->objekt_klasa_pierwsza = new Klasa_pierwsza;
}
}
?>
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
17.11.2007, 12:14:04
Eeee, blad w projekcie? Nie mozesz tego inaczej zaprojektowac?
starach
17.11.2007, 12:24:40
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
17.11.2007, 12:56:44
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
17.11.2007, 13:35:30
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
17.11.2007, 15:03:33
Ehh ... a wystarczy uzyc singletona ...
starach
17.11.2007, 15:31:04
Cytat(Kocurro @ 17.11.2007, 15:03:33 )

Ehh ... a wystarczy uzyc singletona ...
Ehh ... a wystaczy czytać ze zrozumieniem.
dr_bonzo
17.11.2007, 17:51:22
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
<?php
$a = new A();
$b = new B( $a );
?>
czy podobnie, lub zupelnie inaczej
starach
17.11.2007, 19:03:02
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.