jenno
Erfahrenes Mitglied
Ich versuche mich gerade mit der objektorientierten Programmierung in php.
Bisher habe ich eine Klasse, die bestimmte Daten für eine Session sammelt. Es soll dann in einer Session ein Objekt gespeichert werden, das die entsprechenden Daten enthält. Das funktioniert soweit auch alles.
Meine Frage ist allerdings, wenn ich nur eine bestimmte Property der Klasse in der Session speicher und dann in einer anderen Seite die Session wieder auslese und mittels unserialize aus dem Sessioneintrag wieder ein Objekt mache, kann ich dann auf alle beliebigen Methoden der Klasse zu der das Objekt gehört zugreifen?
Hier mal etwas Code:
//Klasse Session
Diese Klasse wird überall eingebunden. Wenn ich jetzt in einer php Seite die unterste Methode setAct aufrufe, dann gibts nen Fehler "Called to undefined function"
//Anfang einer php-Seite
Irgendwas habe ich anscheinend noch nicht ganz verstanden. Aber was?
Edit:
Wenn ich mir das so ansehe, dann denke ich, das Problem ist, dass ich nicht das ganze Objekt in der Session speicher, sonderen "nur" $mysesh->sessdata. Aber ich möchte eben nur diese Daten in der Session zu stehen haben, die in sessdata stehen und nicht alle Properties der Klasse...
Bisher habe ich eine Klasse, die bestimmte Daten für eine Session sammelt. Es soll dann in einer Session ein Objekt gespeichert werden, das die entsprechenden Daten enthält. Das funktioniert soweit auch alles.
Meine Frage ist allerdings, wenn ich nur eine bestimmte Property der Klasse in der Session speicher und dann in einer anderen Seite die Session wieder auslese und mittels unserialize aus dem Sessioneintrag wieder ein Objekt mache, kann ich dann auf alle beliebigen Methoden der Klasse zu der das Objekt gehört zugreifen?
Hier mal etwas Code:
//Klasse Session
PHP:
<?
class Session {
//properties
//database
var $sqlhost = "localhost";
var $sqluser = "test";
var $sqlpass = "xx";
var $sqldb = "test";
var $linkid;
var $seshid;
var $sessdata;
var $err;
var $err_no;
var $userid;
var $act;
function Session($localSeshID, $localUserID=0) {
$this->seshid = $localSeshID;
$this->userid = $localUserID;
//connect to MySQL
$this->linkid = mysql_connect($this->sqlhost, $this->sqluser, $this->sqlpass);
//was not able to connect
if(!$this->linkid) {
$this->err = mysql_error();
$this->err_no = 101;
return;
}
//select database
$result = mysql_select_db($this->sqldb, $this->linkid);
//unable to select database
if(!$result) {
$this->err = mysql_error();
$this->err_no = 102;
return;
}
$query = "SELECT * FROM sessions
WHERE seshid = '$this->seshid'";
$result = mysql_query($query);
if(!$result) {
$this->err = mysql_error();
$this->err_no = 103;
return;
}
//verify valid data returned
$numrows = mysql_num_rows($result);
//save new session in database
if(!$numrows) {
$query = "INSERT INTO sessions
VALUES ('$this->seshid',
'$this->userid',
'$current')";
$result = mysql_query($query);
if(!$result) {
$this->err = mysql_error();
$this->err_no = 104;
return;
}
//finished session create return to script
$this->err_no = 0;
return;
}
//existing session
else {
//get session data
$this->sessdata = mysql_fetch_array($result);
$this->err_no = 0;
unset($this->err);
$this->userid = $this->sessdata[userid];
}
}
function setAct($localAct) {
$this->sessdata[testact] = $localAct;
}
}
?>
Diese Klasse wird überall eingebunden. Wenn ich jetzt in einer php Seite die unterste Methode setAct aufrufe, dann gibts nen Fehler "Called to undefined function"
//Anfang einer php-Seite
PHP:
<?session_start();
include_once($_SERVER['DOCUMENT_ROOT']."inc/settings.inc");
$mysesh->sessdata = unserialize($_SESSION['session']);
//Hier kommt der Fehler "Called to undefined function"
$mysesh->setAct("test");
?>
Irgendwas habe ich anscheinend noch nicht ganz verstanden. Aber was?
Edit:
Wenn ich mir das so ansehe, dann denke ich, das Problem ist, dass ich nicht das ganze Objekt in der Session speicher, sonderen "nur" $mysesh->sessdata. Aber ich möchte eben nur diese Daten in der Session zu stehen haben, die in sessdata stehen und nicht alle Properties der Klasse...
Zuletzt bearbeitet: