Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Odwołania do klasy Singletonowej na różnych podstronach
Forum PHP.pl > Forum > Przedszkole
axxxon
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ć?
ActivePlayer
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.
zegarek84
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...
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.