Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] Odwołania do klasy Singletonowej na różnych podstronach
axxxon
post 19.04.2011, 09:50:43
Post #1





Grupa: Zarejestrowani
Postów: 47
Pomógł: 1
Dołączył: 28.10.2010

Ostrzeżenie: (0%)
-----


Witam!

A więc posiadam klasę singletonowa z kilkoma funkcjami której instancje tworze w pliku index.php,
w pliku index.php includuje tez pliki potrzebne do wyświetlania treści strony(header,footer i content).

Chciałem uzyskać nastepujacy efekt: gdy w jednej karcie mam otwarta zakladke z moja strona(np. posty) i będę chciał wejść na 2 stronę (np kategorie) dostane komunikat typu "Wejście na stronę jest zabronionej bo ktoś inny siedzi na innej stronie".

Dlatego robie cos takiego:
  1. //$zmienna to obiekt mojej klasy singletonowej - utowrzona w index.php
  2. if($zmienna->wolny()==true)
  3. {
  4. $zmienna->zablokuj();
  5.  
  6. //normalny kod strony
  7.  
  8. $zmienna->odblokuj();
  9. }


na każdej swojej podstronie, a ogólna koncepcja jest taka: klasa ma zmienna która przechowuje wartość true bądź false, jesli w
  1. if($zmienna->wolny()==true)

mamy true kod zostaje wykonany a funkcja zablokuj() odpowiednio modyfikuje wartość zmiennej w singletonie, więc identyczny warunek
na innej podstronie zwrócił by false i jej kod nie został by wykonany.

dopiero funkcja odblokuj() pozwoliła by na wykonanie kodu na innej stronie.

Niestety tak sie nie dzieje. Mimo że kod na każdej stronie wykonuje mi się min.ok. 1 minuty(sam pojedynczy skrypt php na stronie zajmuje >50 sekund) to nie wystepuje zjawisko blokady

gdy natomiast użyje w pliku index.php funkcji zablokuj() kod na wszystkich stronach jest blokowany. Wiec nie wiem skąd bierze się to że mimo że klasa jest singletonowa to jej wartości w includowanych plikach sie nie pokrywają.

Czy da się to jakoś rozwiązać?
Go to the top of the page
+Quote Post
ActivePlayer
post 19.04.2011, 11:03:52
Post #2





Grupa: Przyjaciele php.pl
Postów: 1 224
Pomógł: 40
Dołączył: 6.07.2004
Skąd: Wuppertal

Ostrzeżenie: (0%)
-----


klasa singleton nie jest współdzielona pomiędzy requestami, nie osiągniesz w ten sposób tego co chcesz.

w zależności od założeń dane o stanie danej podstrony możesz trzymać w sesji, lub w bazie danych.
Go to the top of the page
+Quote Post
zegarek84
post 19.04.2011, 11:49:00
Post #3





Grupa: Zarejestrowani
Postów: 1 332
Pomógł: 294
Dołączył: 12.10.2008
Skąd: Olkusz

Ostrzeżenie: (0%)
-----


możesz się zainteresować przy okazji __sleep and __wakeup:
http://pl.php.net/manual/en/language.oop5....op5.magic.sleep

by mieć stale "żywy" obiekt musiałbyś napisać własny serwer PHP nasłuchujący na określonym porcie jak np. jest to w node.js (ale to jest w JavaScript) - jednak to wyższa szkoła jazdy a nie znam/chyba nie ma fremworków PHP na wzór node.js (a szkoda)

[EDIT]
cosik tam znalazłem teraz
heh - przeanalizuję sam co tam wymodzili w tym nanoserv ^^:
http://nanoserv.si.kz/
i jeszcze projekcik hostowany na google phpsocketdaemon:
http://code.google.com/p/phpsocketdaemon/

chyba jednak coś będzie można z tego wyciągnąć do obsługi http ^^ - jeśli framwork dobrze napisany to fajna alternatywa by była dla node.js tyle, że w PHP...

Ten post edytował zegarek84 19.04.2011, 12:39:32


--------------------
Jeśli twoja ręka rusza do przodu powstrzymaj swój gniew; gdy wyprzedza cię twój gniew - wycofaj rękę.

Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 13.06.2025 - 00:33