[PHP] Objekte einer Klasse wieder aufgreifen

Tobi

Well-known member
ID: 108757
L
21 April 2006
317
16
Hi,
ich habe folgendes Problem: Ich möchte, ein Objekt, das ich in der vorherigen Seite bereits initialisiert habe auf der nächsten Seite noch einmal verwenden, da ich nicht jedes mal wieder die Daten einlesen lassen will. Ich habe das bisher so gemacht, dass ich die Objektvaiable in einer Session gespeichert habe und somit die Variable auch auf der anderen Seite zur Verfügung stehen hatte. Jetzt wollte ich einmal fragen, ob es überhaupt eine Möglichkeit gibt, eben das Objekt einfach wieder zu werwenden auf der andreren Seite.

Freue mich auf Antworten

MfG
Tobi
 
Wenn ich das richtig gelesen hab, dann hast du die Lösung doch bereits: in der Session speichern.
Die Alternative wäre das Objekte zu serialisieren (Methoden gehen unter Umständen verloren, da bin ich ned sicher; mal das Manual befragen oder ausprobieren) und in der Datenbank zu speichern.

Den Besucher auf der nächsten Seite wieder zu identifizieren musst du eh mit Keksen machen, also kann du gleich die PHP-Session benutzen.
 
Also ich habe das Problem jetzt mal anhand eines Scriptbeispiels etwas veranschaulicht. Ich habe drei Dateien: class.php (die Klasse), index.php (die Seite, die als erstes aufgerufen wird) und versuch.php (die Seite, auf die verlinkt wird).

class.php
PHP:
<?
class userdata  {
  var $username;
  var $password;
  
  function define_data($username, $password)  {
    $this->username = $username;
    $this->password = $password;
  }
  
  function ausgeben()  {
    echo "Username: ".$this->username."<br>Passwort: ".$this->password;
  }
  
}
?>

index.php
PHP:
<?
session_start();
include_once("class.php");
$user = new userdata;
$user->define_data("Test_Username", "Test_Passwort");
$user->ausgeben();
$_SESSION["user"] = $user;
echo "<br><a href = \"versuch.php\">weiter</a>";
?>

versuch.php
PHP:
<?
session_start();
include_once("class.php");
$user = $_SESSION["user"];
echo $user;
$user->ausgeben();
?>

Und dann taucht folgende Fehlermeldung auf:
Fatal error: main() [function.main]: The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition "userdata" 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:\Programme\xampp\htdocs\Scripts\versuch\versuch.php on line 6

Und nun wollte ich fragen, ob eine Operation dieser Art und Weise in PHP überhaupt möglich ist, oder nicht, also dass ich das Objekt übergeben und dann die gespeicherten Daten des Objekts auch wieder mit der Klasse auszulesen.

MfG
Tobi
 
Hab grad eben deinen Post noch mal durchgelesen und dann mal nach den serialisieren gesucht und da hab ich doch glatt die Lösung gefunden. Vielen Dank. Mir war vorher noch nicht bekannt, dass es eine solche Funktion gibt.

MfG
Tobi
 
https://www.php.net/manual/de/function.serialize.php

Anmerkung: In PHP 3 werden Objekteigenschaften serialisiert, aber die Methoden gehen verloren. Diese Beschränkung wurde in PHP 4 aufgehoben, so dass sowohl Eigenschaften als auch Methoden wiederhergestellt werden können. Bitte lesen Sie den Abschnitt Objekte serialisieren des Kapitels Klassen und Objekte für weitere Informationen.
 
also bei mir funktioniert es, wenn ich einfach die variable bevor sie gespeichert wird serialisiere und danach, wenn ich sie aus der session rauslese wieder de-serialisiere. Also vielen Dank für die Hilfe.

MfG
Tobi
 
also bei mir funktioniert es, wenn ich einfach die variable bevor sie gespeichert wird serialisiere und danach, wenn ich sie aus der session rauslese wieder de-serialisiere. Also vielen Dank für die Hilfe.

MfG
Tobi

ist aber quatsch... das ist ressourcen verschwendung. die sessions von php arbeiten auch nur mit serialize und unserialize. du musst bloss drauf achten dass die klasse vor unserialize geladen ist. also du musst nur include_once("class.php"); vor session_start schreiben...