Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Instancja klasy jej adres itp...
Forum PHP.pl > Forum > Przedszkole
daves
Witam.

Tak sobie piszę w php i zastanawia mnie taka rzecz: tworząc obiekt dowolnej klasy np.
  1. <?php
  2. $obj = new MojaKlasa();
  3. ?>

stworzyłem właśnie zmienną wskazującą na obiekt klasy w pamięci komputera( tak przynajmniej jest w językach typu c, c++, delphi itp).
Idąc tym rozumowaniem można by zwrócić adres na jaki wskazuje nasza zmienna $obj, a skoro tak to adres ten można bez problemów przerzucać między stronami i manipulować naszym obiektem do czasu jego usunięcia.
A jednak... nigdzie się nie spotkałem z tego typu rozwiązaniami.
I tak się zastanawiam czy oby na pewno jest to obiekt alokowany w pamięci komputera gdyż nie znalazłem metody na zwrócenie adresu obiektu a co za tym idzie z obiektu nie mogę korzystać na innej podstronie.

Jak to jest w php?

Pzdr.
dr_bonzo
php != C/C++
Obiekt jest alokowany w pamieci -- no przeciez musi byc gdzies zapamietany -- ale nie dostaniesz jego adresu (no chyba ze jakims specjalnym rozszerzeniem -- nie slyszalem o takiem), chcesz adresy i wskazniki -- uzyc C/C++, nie chcesz ich pozostan przy php.

Poza tym przerzucanie adresu obiektu miedzy stronami nic ci nie da, bo obiekt jest niszczony na koniec dzialania skryptu.

Jak chcesz przenosic obiekty miedzy stronammi to wrzuc je do sesji
$_SESSION[ 'blabla' ] = $obiekt;
daves
No dobrze... skoro jedynym wyjściem przerzuceniem obiektu na następną stronę jest wrzucenie go do sesji to dlaczego kod strony 1 daje wynik jak w patrz zaremowane:
  1. <?php
  2.  
  3. class Sesja
  4. {
  5. var $sID;
  6. var $sName;
  7. function Sesja($warunek = 'none'){
  8. if ($warunek != 'none'){
  9. $this->sID = session_id();
  10. $this->sName = $warunek;
  11. }
  12. }
  13. }
  14.  
  15. $_SESSION['obiekt'] = new Sesja('s');
  16. $objPusty = $_SESSION['obiekt'];
  17. $_SESSION['obiekt']->sName = 'zmiana nazwy';
  18.  
  19. print $_SESSION['obiekt']->sName."<br>"; // zwraca 'zmiana nazwy'
  20. print $objPusty->sName; // zwraca 's'
  21.  
  22. print_r($_SESSION);
  23. //zwraca 'Array ( [obiekt] => sesja Object ( [sID] => ffdd0972521c45820a6204ab0a3db63f [sName] => zmiana nazwy ))'
  24.  
  25. ?>


Natomiast po przejściu na stronę następną za pomocą linka lub butona formy zapis taki nie zdaje egzaminu:
  1. <?php
  2.  
  3. $obj = $_SESSION['obiekt'];
  4.  
  5. print $_SESSION['obiekt'] -> sName."<br>"; // nic nie zwraca
  6. print $obj -> sName; // nic nie zwraca
  7.  
  8. print_r($_SESSION);
  9. //zwraca 'Array ( [obiekt] => __PHP_Incomplete_Class Object ( [__PHP_Incomplete_Class_Name] => sesja [sID] => ffdd0972521c45820a6204ab0a3db63f [sName] => zmiana nazwy ))'
  10.  
  11. ?>


Widać, że zmienne znajdują się w sesji ale jak się do nich dobrać?
dr_bonzo
Nie dolaczyles pliku z definicja klasy na drugiej stronie -- musisz to zrobic przed session_start().
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.