Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Tworzenie klas
borpaw
post 30.08.2012, 15:00:17
Post #1





Grupa: Zarejestrowani
Postów: 439
Pomógł: 0
Dołączył: 3.06.2010

Ostrzeżenie: (50%)
XXX--


Mam takie pytanie.
Robie dla mojej strony index.php w którym są tworzone obiekty przez "new"
  1. $db = new DBconnect(DB_HOST, DB_NAME, DB_USER, DB_PASS);
  2. $pages = new Pages();
  3. $init = new Init();

Wszystkie linki na stronie są kierowane na index.php?sub=N, czyli za każdym kliknieciem na stronie tworzą się przez new te same klasy.
Czy tak ma być? Czy to jest źle?
Go to the top of the page
+Quote Post
nospor
post 30.08.2012, 15:18:34
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




No raczej prawidłowo... zarówno zmienne jak i klasy nie są przenoszonę pomiędzy requestami


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
borpaw
post 30.08.2012, 15:59:32
Post #3





Grupa: Zarejestrowani
Postów: 439
Pomógł: 0
Dołączył: 3.06.2010

Ostrzeżenie: (50%)
XXX--


Może ja to źle rozumiem, ale wypełniam zmienne klasy jakąś zawartością i chciałbym żeby ta zawartość nie znikała po każdym kliknięciu w link
Jak coś takiego zrobić. np klasa do logowania pamięta swoją zawarość a nie tworzy sie na nowo ciągle?
Go to the top of the page
+Quote Post
Crozin
post 30.08.2012, 16:04:55
Post #4





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

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


1. Sesje.
2. Jeżeli do sesji chcesz wrzucić obiekty, powinny one być utworzone z klasy implementującej interfejs Serializable.
Go to the top of the page
+Quote Post
borpaw
post 30.08.2012, 16:08:39
Post #5





Grupa: Zarejestrowani
Postów: 439
Pomógł: 0
Dołączył: 3.06.2010

Ostrzeżenie: (50%)
XXX--


Czyli są tylko dwa wyjścia albo zastosować sesje,
albo za każdym przeładowaniem strony wypełniać klasy na nowo?

Nie robi się tak że klasa jest łądowana tylko raz?
Go to the top of the page
+Quote Post
Crozin
post 30.08.2012, 16:54:57
Post #6





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

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


PHP działa na zasadzie: żądanie HTTP z przeglądarki -> władowanie wszystkiego co potrzebne do jego przetworzenia -> zwrócenie odpowiedzi HTTP do przeglądarki -> zwolnienie wszystkich zasobów.
Wszystkich, w tym także sesji, dlatego są one zapisywane w jakiejś bazie danych, a obiekty przed zapisaniem muszą zostać zserializowane.
Go to the top of the page
+Quote Post
PanGuzol
post 30.08.2012, 19:03:59
Post #7





Grupa: Zarejestrowani
Postów: 353
Pomógł: 50
Dołączył: 28.07.2005
Skąd: Łaziska Górne

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


Się podepnę z pytaniem bo na temat.

Z ciekawości co będzie jak nie użyję serialize i zapiszę obiekt w sesji no i mam kod

foo.php
  1. <?php
  2.  
  3. class foo {
  4.  
  5. public $a;
  6.  
  7. private $b;
  8.  
  9. public function setB($c)
  10. {
  11. $this->b = $c;
  12. }
  13.  
  14. public function getB()
  15. {
  16. return $this->b;
  17. }
  18. }
  19.  
  20. ?>


index.php
  1. <?php
  2.  
  3. include('foo.php');
  4. $o = new foo();
  5.  
  6. $o->a = 1;
  7. $o->setB(4);
  8. $_SESSION['test'] = $o; // lub clone $o;
  9. var_dump($_SESSION);
  10. ?>
  11. <a href="footest.php">test</a>
  12.  


footest.php
  1. <?php
  2.  
  3. include('foo.php');session_start();
  4. var_dump($_SESSION);
  5. echo $_SESSION['test']->getB();
  6. $_SESSION['test']->setB(7);
  7. echo $_SESSION['test']->getB();
  8. ?>


No i pomimo iż nie użyłem funkcji serialize/unserialize obiekt w sesji się znajduje z poprawnymi wartościami i działającymi metodami.


--------------------
Sposób na życie? Uśmiech na twarzy :D
"Widzę więcej, wiem więcej, tak to jest mniej więcej"
"NIE kradnij, rząd nielubi konkurencji"
Go to the top of the page
+Quote Post
Crozin
post 30.08.2012, 19:12:28
Post #8





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

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


Ponieważ PHP, a dokładniej domyślny mechanizm sesji, zawsze przed zapisem jej do pliku serializuje sobie tablicę $_SESSION. Także Ty sam nie musisz wrzucać do sesji zserializowanych danych, tylko upewnić się, że obiekty które do niej wrzucasz implementowały interfejs Serializable.

Sposób działania sesji, w uproszczeniu:
  1. $sid = 'dsadasxcvcxvcxsa'; // identyfikator sesji, np. z ciasteczka
  2.  
  3. // odczytanie danych
  4. $sessionFile = '/path/to/session/' . $sid;
  5. if (file_exisits($sessionFile) && time() - filemtime($sessionFile) < 60 * 30) {
  6. $_SESSION = unserialize(file_get_contents($sessionFile));
  7. }
  8.  
  9. // cały skrypt
  10.  
  11. // zapis danych
  12. file_put_contents($sessionFile, serialize($_SESSION));


Ten post edytował Crozin 30.08.2012, 19:16:42
Go to the top of the page
+Quote Post
PanGuzol
post 30.08.2012, 19:19:45
Post #9





Grupa: Zarejestrowani
Postów: 353
Pomógł: 50
Dołączył: 28.07.2005
Skąd: Łaziska Górne

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


Tyle, że w moim przykładzie nie użyłem interfejsu Serializable


--------------------
Sposób na życie? Uśmiech na twarzy :D
"Widzę więcej, wiem więcej, tak to jest mniej więcej"
"NIE kradnij, rząd nielubi konkurencji"
Go to the top of the page
+Quote Post
Crozin
post 30.08.2012, 20:03:57
Post #10





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

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


W takim przypadku interpreter zserializuje każdą właściwość obiektu, nie pozostawiając Ci żadnej kontroli nad tym procesem. To z kolei może prowadzić do błędów, bądź niepożądanych efektów.
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: 20.07.2025 - 01:45