Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] Życie obiektu w PHP.
DarkAbso
post 25.06.2015, 21:02:33
Post #1





Grupa: Zarejestrowani
Postów: 60
Pomógł: 10
Dołączył: 17.11.2011

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


Pewnie zadam dla Was proste pytanie, ale dzisiaj nadeszła mnie delikatna rozkmina na temat życia obiektu w PHP i może ktoś da mi odpowiedź. Przypuśćmy, iż użytkownik wysyła zapytanie do serwera i w tym momencie odzywa się interpreter PHP. Tworzone są obiekty, referencje do nich zaczynają przeprowadzać swoje operacje, a użytkownik po chwili dostaje odpowiedź. W tym momencie nie ma już referencji do obiektu i "odśmiecacz" czyści stos. I teraz się zastanawiam, czy istnieje możliwość, aby przedłużyć życie takiego obiektu? Trochę bez sensu go usuwać na dany moment, jeżeli wiem, iż użytkownik zaraz będzie z niego korzystał ponownie. Największy problem byłby po stronie interpretera PHP, ponieważ musiał by dostawać inofrmację kiedy taki obiekt ma iść do destrukcji. To są moje delikatne rozkminy, a w sieci niewiele znalazłem na ten temat.
Go to the top of the page
+Quote Post
com
post 25.06.2015, 21:22:18
Post #2





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

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


poczekaj do wersji 7 smile.gif
Go to the top of the page
+Quote Post
DarkAbso
post 25.06.2015, 21:28:34
Post #3





Grupa: Zarejestrowani
Postów: 60
Pomógł: 10
Dołączył: 17.11.2011

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


To widzę, że grube postępy zrobią w tym kierunku. Zanim będzie wersja 7 i się ustabilizuje to pewnie minie kilka lat, ale jak widzę to nie mam wyjścia i muszę poczekać. smile.gif
Go to the top of the page
+Quote Post
aniolekx
post 26.06.2015, 07:14:26
Post #4





Grupa: Zarejestrowani
Postów: 340
Pomógł: 46
Dołączył: 31.07.2009
Skąd: A

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


mozesz uzyc np tego: http://php.net/manual/en/memcached.set.php
Go to the top of the page
+Quote Post
Xelah
post 26.06.2015, 07:38:40
Post #5





Grupa: Zarejestrowani
Postów: 139
Pomógł: 24
Dołączył: 12.05.2013
Skąd: Hamburg

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


Nie widziałem niczego związanego z tym tematem w PHP 7 (cheba, że źle szukam).
I wydaje mi się, że takiego czegoś niegdy w PHP nie będzie, bo to oznaczało by, że PHP, jako język, musi być świadomy istnienia sesji - i to na poziomie GC. Sesja nie jest core w PHP. To tylko extension. Czyli już web server albo core PHP musiałby implementować jakiś rodzaj sesji, żeby połączyć między sobą dwa requesty. Do tego pojawiłby się problem kiedy w ogóle te obiekty usuwać? Nigdy?
Jakoś czarno to widzę.

Jeśli rzeczywiście konstukcja obiektu jest tak kosztowna, że nie chcesz tego robić przy każdym rządaniu, to są inne metody (memcache, redis i tym podobne).
Go to the top of the page
+Quote Post
DarkAbso
post 26.06.2015, 08:38:55
Post #6





Grupa: Zarejestrowani
Postów: 60
Pomógł: 10
Dołączył: 17.11.2011

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


@Xelah dokładnie to samo pisałem w pierwszym poście, mówię o destrukcji obiektu. W tym wypadku interpreter rzeczywiście miałby problem. Co do memcache to już kiedyś czytałem o tym, ale nie testowałem i chyba pora aby to zrobić.
Go to the top of the page
+Quote Post
Xelah
post 26.06.2015, 08:41:38
Post #7





Grupa: Zarejestrowani
Postów: 139
Pomógł: 24
Dołączył: 12.05.2013
Skąd: Hamburg

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


@DarkAbso Zasugerowałem sie Twoim drugim postem i postem com-a. PHP w ogóle nie idzie w tym kierunku, bo to nie jest coś, to można rozwiązać na poziomie języka.
Go to the top of the page
+Quote Post
Crozin
post 26.06.2015, 08:44:59
Post #8





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


1. Nie da się. Tak już działa PHP, że po zakończeniu obsługi żądania kończy w ogóle swój żywot.
2. Ale przecież podstawowy mechanizm obsługi sesji powinien Cię uratować? Pamiętaj tylko by Twoje obiekty były serializowalne - Google: PHP serializ
Go to the top of the page
+Quote Post
com
post 26.06.2015, 20:48:31
Post #9





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

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


tak ale jeśli dostanie vm to można by zrobić gc jak w javie np smile.gif zamiast zliczania referencji

Ten post edytował com 26.06.2015, 20:49:01
Go to the top of the page
+Quote Post
Xelah
post 27.06.2015, 14:31:57
Post #10





Grupa: Zarejestrowani
Postów: 139
Pomógł: 24
Dołączył: 12.05.2013
Skąd: Hamburg

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


Tylko to chyba nie ma za wiele wspólnego z samym GC. Z javą miałem do czynienia ostatnio ponad 10 lat temu, więc mogę się mylić, ale GC w Javie też usuwa obiekty, dla których nie istnieją referencje. Robi to nie w oparciu o licznik a poprzez skanowanie stosu, ale efekt końcowy jest identyczny.

Fakt, że Java może zachować stany pomiędzy requestami nie wynika ze sposobu działania GC a z tego, że ma VM, w którym działają na przykład servlet czy beans. Sama VM czy GC tego nie dają smile.gif
Go to the top of the page
+Quote Post
vokiel
post 27.06.2015, 16:50:58
Post #11





Grupa: Zarejestrowani
Postów: 2 592
Pomógł: 445
Dołączył: 12.03.2007

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


Tylko w czym problem? W tym, że PHP stworzy obiekt Request potem po zakończeniu żądania go usunie, a przy następnym stworzy nowy, prawie taki sam (być może bardzo, bardzo podobny)?

Tak to działa i wynika bezpośrednio z zasady bezstanowości HTTP. IMHO to nawet zaleta - wszystko jest czyszczone po zakończeniu żądania, następne zaczyna z czystą pamięcią, jedyny minus to taki, że podobne obiekty są ciągle tworzone i usuwane.


--------------------
Go to the top of the page
+Quote Post
DarkAbso
post 29.06.2015, 08:42:21
Post #12





Grupa: Zarejestrowani
Postów: 60
Pomógł: 10
Dołączył: 17.11.2011

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


@vokiel drugi minus według mnie to taki, iż nie posiadamy stanu obiektu po zakończonym żądaniu. Jeżeli chcieli byśmy pracować dalej na wynikach tego obiektu to musimy je gdzieś przechować, bo obiekt po prostu umiera.
Go to the top of the page
+Quote Post
Pyton_000
post 29.06.2015, 09:05:35
Post #13





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Taka jest specyfika PHP, jak chcesz to możesz przecież serwializować obiekt i dalej na nim pracować.
Go to the top of the page
+Quote Post
DarkAbso
post 29.06.2015, 19:59:51
Post #14





Grupa: Zarejestrowani
Postów: 60
Pomógł: 10
Dołączył: 17.11.2011

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


Właśnie się pochyliłem nad serializowaniem obiektów i tak jak mówiliście to powinno załatwić sprawę w skrajnych przypadkach. Dziękuję wszystkim za odpowiedź.
Go to the top of the page
+Quote Post
grzemach
post 30.06.2015, 21:12:56
Post #15





Grupa: Zarejestrowani
Postów: 121
Pomógł: 4
Dołączył: 9.06.2007
Skąd: Kielce

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


Nie prościej zrobić program C/C++ który będzie robił za serwer i on przejmie całe generowanie odpowiedzi, PHP będzie robiło za PROXY. W takiej sytuacji aplikacja może działać cały czas.


--------------------
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: 16.07.2025 - 09:57