Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php]obiekty przy wrzucaniu do $_SESSION
Forum PHP.pl > Forum > Przedszkole
rajcho
Witam,

znalazlem posta na podobny temat i wszyscy twierdzili, ze przed wyciagnieciem obiektu z $_SESSION musi byc zadeklarowana definicja klasy. Lecz moze mi ktos napisac czy ta definicja MUSI byc w kodzie napisana czy moze byc w jakis sposob zaincludowana?
Pytam sie bo mi wlasnie includowanie nie dziala:(

Napisalem prosty skrypt testowy

definicja klasy
Kod
<?php
class obiekt{
     private $x;
     private $y;
     public function __construct($x,$y){
         $this->x=$x;
         $this->y=$y;
     }

}
?>


plik nr 1
Kod
<?php
session_start();
include('obiekt.php');


$p=new obiekt(43,453);


$_SESSION['pp']=$p;
$_SESSION['g']='test';
header("Location: i2.php");
exit();



?>


i plik nr 2
Kod
<?php
session_start();
include('obiekt.php');
$z=$_SESSION['pp'];
$x=$_SESSION['g'];
print_r($x);
echo '
';
print_r($z);
exit();
?>


w przegladarce uzyskuje komunikat o obiekcie typu
Kod
__PHP_Incomplete_Class Object  (      [__PHP_Incomplete_Class_Name] => obiekt      [x:private] => 43      [y:private] => 453  )


Dziala poprawnie jesli zamiast includa w pliku nr 2 wkleje definice klasy. Ale mija sie to troche z celem wedlug mnie. Jesli stworze kilka plikow wykorzystujacych ta klase i pozniej bede chcial ja zmodyfikowac to bym musial wszystkie pliki po koleji poprawiac.

Wie ktos co robie zle??
siemakuba
Spróbował bym tak:
zamiast:
  1. <?php
  2. include('obiekt.php');
  3. ?>

daj tak:
  1. <?php
  2. include('obiekt.php');
  3. ?>


Musisz znać definicję klasy przed jej odbudwaniem z danych sesyjnych tak. Więc jeżeli najpierw uruchamiasz sesje, próbuje sobie ona te obiekty odtworzyć, ale okazuje się, że ich nie zna. Co dalej się dzieje to już wiesz ;)

pozdr.
rajcho
dzieki wielkie, teraz mi dziala.

Coz Twoje tlumaczenie jest jak najbardziej logiczne. Lecz czemu zawsze sie mowi ze session_start ma byc na samym poczatku przed wszyskim? jak to zawsze bywa wyjatek potwierdza regule?

Jeszcze raz dzieki i pozdr.
siemakuba
Hm, zależy jak rozumiesz pojęcie "przed wszystkim". Jak rozumiesz tak, że na początku pliku, to nie do końca dobrze.
Raczej trzeba to rozumieć "na początku logiki/pracy skryptu". Zakładając, że w dołączanym pliku masz definicję klasy (nazwijmy ją biblioteką), to nie jest to jeszcze coś co pracuje samodzielnie, right? Możesz dołączyć nawet 107 plików z klasami, ale i tak nic się nie będzie działo dopóki faktycznie nie uruchomisz skryptu, right?

Czyli, można to namalować tak:
  1. dołączasz wszystko, co potrzebujesz do działania skryptu
  2. uruchamiasz sesje
  3. uruchamiasz skrypt
Nie wiem czy da się dojrzeć w tym tłumaczeniu jakąś jasność ;> Mam nadzięję ;)

pozdr.
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.