Kezdőoldal » Számítástechnika » Weblapkészítés » Hogyan kell tárolni objektumot...

Hogyan kell tárolni objektumot $_SESSION változóban?

Figyelt kérdés

A következő a problémám.


//Van egy osztályom:


class user{

private $sessionid;


function __construct(){

$this -> sessionid = session_id();

}


function getSessionid(){

return($this -> sessionid);

}


}


//amit ha példányosítok:


$_SESSION['user'] = new user;


//akkor simán kiírja a következő parancsra az azonosítót:


/*(line 14)*/ print($_SESSION['user'] -> getSessionid());


//de ha így példányosítom:


if(!isset($_SESSION['user'])) {$_SESSION['user'] = new user();}


// Akkor a következő híbát kapom a kiíratásra:


Fatal error: main(): The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition "user" of the object you are trying to operate on was loaded _before_ unserialize() gets called or provide a __autoload() function to load the class definition in C:\...index.php on line 14


A $_SESSION['user'] változó nem kap később értéket, úgy általában minden műkszik a $_SESSIONOKKAL, szoval nem használtam unsetet sem. Ötlet? :)



2014. júl. 14. 05:02
 1/9 A kérdező kommentje:
Lehetséges hogy egy tagfüggvény meghívásánál az autoload nem tölti be az osztályt, csak példányosításkor?
2014. júl. 14. 05:12
 2/9 Drone007 ***** válasza:

Esetleg...


if(!isset($_SESSION['user'])) {$_SESSION['user'] = new user;}

2014. júl. 14. 08:50
Hasznos számodra ez a válasz?
 3/9 anonim ***** válasza:

Az autoloadert emlegeted, de a példakódban nincs definiálva az __autoload() metódus...

[link]


Egyébként nekem elsőre inkább a szérializáció ugrott be.

[link]

[link]


Ha azt sikerül megérteni, akkor valahogy így nézne ki:


$x = new user;

// ...

$_SESSION['user'] = serialize($x);


// kiolvasás:

$x = unserialize($_SESSION['user']); // itt is látszódjon a "user" class!

// ...

2014. júl. 14. 09:37
Hasznos számodra ez a válasz?
 4/9 anonim ***** válasza:
De én inkább tömböket (array) használok, gyorsabbak, mint az objektumok...
2014. júl. 14. 09:38
Hasznos számodra ez a válasz?
 5/9 A kérdező kommentje:

#2 ja igen, már zárójel nélkül is kipróbáltam, de ugyanaz a helyzet. Meg a serialize-ra is gondoltam, csak hát az objektumoknak nem pont hogy könnyebbé kéne tenniük az életünket? :)


És tényleg kimaradt:


function __autoload($class){

$file = "../class/".$class.".inc.php";

require_once($file);

2014. júl. 14. 16:51
 6/9 A kérdező kommentje:
Egyébként köszi, serialize-al működik! :)
2014. júl. 14. 17:04
 7/9 anonim ***** válasza:

Megkönnyítik, meg mindigen, igen.

De ha jól tudom, a session-höz tartozó dolgokat egy szövegfájlban tárolja a PHP a szerveren. Azt meg ugye csak úgy nem lehet...

A szérializáció pedig pont azt csinálja, hogy egy objektumot szöveggé alakít.

2014. júl. 15. 08:29
Hasznos számodra ez a válasz?
 8/9 PHP de kóder! ***** válasza:
persze, hogy semmi valtozas, mert ha csak egy sor van az if utan, akkor a { es a } elhagyhato.
2014. júl. 15. 10:35
Hasznos számodra ez a válasz?
 9/9 A kérdező kommentje:
Mármint a függvény bemeneti értékeket határoló zárójelre gondoltam.
2014. júl. 15. 11:47

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!