Black-Berry
30.04.2008, 08:55:38
Mam 2 klasy które potzrebują siebie nawzajem. Jedna Language_Manager druga System_Log.
<?php
$languageManager = new Language_Manager();
$systemLog = new System_Log($languageManager);
?>
W konstruktorze jednej podaję odwołanie do drugiej ale potrzebuję czegoś na wzór:
<?php
$languageManager = new Language_Manager($systemLog );
$systemLog = new System_Log($languageManager);
?>
Da się to jakoś osiągnąć ?
Sedziwoj
30.04.2008, 09:02:38
Tak z ciekawości, po co Ci w systemie logowania, klasa do obsługi języków?
sniezny_wilk
30.04.2008, 09:13:30
A nie możesz użyć extends ?
link..
PS: proszę popraw temat bo te "dwuch" boli..
EDIT: @batman - thx
mike
30.04.2008, 09:40:40
Dziedziczenie tutaj to akurat jedno z gorszych wyjść. Nie polecam a wręcz odradzam. Zaburzenie jakiejkolwiek logiki.
~Black-Berry jeśli faktycznie potrzebujesz jednaj klasy w drugiej i na odwrót to zrób tak:
<?php
$languageManager = new Language_Manager();
$systemLog = new System_Log($languageManager);
$languageManager->setSystemLog($systemLog);
?>
Aczkolwiek niewiele myśląc potrzeba posiadania
Language_Managera do utworzenia
System_Loga wydaje się dość dziwna.
DeyV
30.04.2008, 09:41:50
Ten przykład raczej nie kwalifikuje się do extend.
Ja zrobiłbym to mniej więcej tak:
<?php
$languageManager = new Language_Manager();
$languageManager->registerLog( new System_Log( $languageManager ) );
?>
choć trzeba przyznać, że krzyżowe wykorzystywanie obiektów często prowadzi do sporego zamieszania w kodzie, którego ja osobiście nie lubię.
Edit:
Mike był szybszy
Black-Berry
30.04.2008, 15:16:14
Dzięki za posty. Postaram się zastosować metodę mike'a.
Wyjaśnienie: Language_Manager includuje pliki jezykowe z których kożysta systemLog (chodiz o tłumaczenia). A info o tym, że konkretny plik językowy został załadowany chcę umieścić w logach (informację, że na przykład nie było tłumaczenia polskiego więc system załadował angielski plik z tłumaczeniami)
Tytuł poprawiłem. Bardzo przepraszam za bład.
pozdrawiam.
Sedziwoj
30.04.2008, 15:42:56
To jak Ci loguje ładowanie pliku językowego, skoro dopiero potem jest tworzone logowanie?
Black-Berry
30.04.2008, 17:16:12
no właśnie w tym sęk, muszę wymyslić coś rozsądnego. Napisałem posta bo myślałem, że może jest jakiś standard postepowania w takich wypadkach i ktoś coś słyszał. Posiedzę nad tym jeszcze z pół godzinki i napewno coś ruszy. jeszcze raz dzięki za posty.
edit: Rozwiązałem problem. Błędem z mojej strony było zakładanie, że cokolwiek powinno być wykonywane zaraz po załadowaniu konstruktora. W kontruktorze powinny być inicjalizowane tylko uchwyty do innych klas.
Sedziwoj
30.04.2008, 17:28:45
Tylko że w Twoim przypadku najpierw tworzysz obiekt Log a potem Lang, bo lang w czasie ładowania klasy korzysta z log (ale może już po załadowaniu, kiedy będzie już działać, tylko nadal uważam że to grzebanie w gównie, lepiej aby w czasie wyświetlania logów było dodawane tłumaczenie jeśli już jest konieczne)
EDIT zjadłem spację
Black-Berry
30.04.2008, 17:43:32
Chciałem dodać nowy wpis do ksiązki logów zaraz po starcie systemu. Niestety nie dało się bo wtedy wpis nie mógłby być tłumaczony na inne języki (a chcę mieć możliwość tłumaczenia wszystkiego). Zrezygnowałem więc z tego wpisu i teraz pierwszy jaki ląduje w książce to wpis o załadowaniu tłumaczeń systemowych. Masz rację, takie coś to kopanie się z koniem. Nie da sie to trudno Pomijam pierwszy wpis.
Sedziwoj
30.04.2008, 18:05:37
A nie możesz w logach umieszczać id do wiadomości i to co jest od niej niezależne?
Bo skoro coś bierzesz z lang, to równie dobrze, możesz tylko podać co ma wziąć, a potem przy wyświetlaniu pobiera odpowiednią wersję.
Do tego nie wiem, dlaczego Logi mają być zależne od wersji językowej, no chyba że nie są tylko dla obsługi technicznej...
Black-Berry
1.05.2008, 06:47:30
U mnie wpis składa się przede wszystkim z tekstu, typu (note,warn, error) i czasu(do milisekund) dlatego ten tekst 1 wiadomosci musiał być wpierw tłumaczony. To bardziej taka konsola... W przyszłosci może inaczej to rozbuduję ale będę miał solidną podstawę. Ten 1 wpis miałem teź zamiar uzywać do obliczania czasu wykonania skryptu dlatego był taki istotny.
Edit: Jeśli dobrze rozumiem to unikalne ID wiadomosci nie przejdzie bo będzie za duzo rodzajów wpisów. Na razie tylko dla obsługi technicznej (czyli mnie) ale w przyszłości logi będę wysyłał mailem w razie wystąpienia errorów... Dokładnie jeszcze nie wiem ale skoro juz je zaczałem pisać to wolę to zrobić dobrze.
Sedziwoj
1.05.2008, 21:57:40
Wiesz, i tak będziesz miał je jakiś identyfikowane, przecież masz je w wersjach językowych, więc jakoś nie widzę różnicy, czy zapisuje się wiadomość, czy tylko jej identyfikator, a przy wyświetlaniu jest dopiero na prawdę pobierana... (wyświetlani/wysyłanie czy cokolwiek innego)
Black-Berry
1.05.2008, 22:22:20
Tak, masz rację. Ostatecznie rozwiązałem sprawę tak że do ksiązki wpisuję constanty, a dopiero przy wyswietlaniu zamieniam je na przetłumaczone zdania. Początkowo chciałem oszczędzić trochę czasu procesora ale to chyba nie ma jednak najmniejszego sensu. Czas tak szybko leci, że człowiek nie zauważa jak to z P90 nagle zrobiło się core Quatro na serwerach
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.