2010-01-11 5 views
5

Ich bin neu in OOP und schreibe eine meiner ersten Klassen. Ich arbeite für einen Versicherungsmakler und versuche, eine Klasse zu verwenden, um Sachen über ein Zitat zu speichern und das Objekt als eine Sitzungsvariable zu speichern.Speichern eines PHP-Objekts in einer Session-Variablen

Sache ist, wenn ich die Session-Variablen zu sehen, die ich erhalten:

sessionName   

__PHP_Incomplete_Class Object 
(
    [__PHP_Incomplete_Class_Name] => myClass 
    [brokerId] => 

Kann mir jemand sagen, warum es unvollständig Klassennamen angezeigt?

Antwort

5

Stellen Sie sicher, dass entweder die Klassendefinition vorhanden ist, bevor session_start() aufgerufen wird, z.

require_once 'class.MyClass.php'; 
session_start(); 

oder eine unserialize_callback_func gesetzt, die bei http://docs.php.net/function.unserialize wie beschrieben wird versuchen, die Klassendefinition zu laden.

edit: Dies kann auch über spl_autoload_register() erfolgen. Z.B.

spl_autoload_register(function($name) { 
    // only a demo ...this might be insecure ;-) 
    require_once 'class.'.$name.'.php'; 
}); 
session_start(); 
echo '<pre>'; 
var_dump($_SESSION); 
echo '</pre>'; 
+0

Das ist richtig, vergessen, was ich geantwortet hatte :) – soulmerge

1

Ich schaffte es, alles selbst zu reparieren, nicht sicher, wie aber.

dass ich dafür gesorgt, dass die Seite, die Werte anzeigt, wie strukturiert wurde:

require_once("Class.php"); 
session_start(); 

$_SESSION['myObject']->printVariables(); 

Und dass die Seite mit dem Objekt der Konstruktion war wie:

# Include the class 
require_once($_SERVER['DOCUMENT_ROOT'] . "/Class.php"); 

# Instantiate a new policy 
$_SESSION['myObject'] = new quote('54'); 
$_SESSION['myObject']->printVariables(); 

ich, dass die Seite Aufruf der Anzeige auch sicher gemacht Das Objekt verwendete keine Serialisierungsfunktionen, da diese nur Fehler zu verursachen schienen.

0

Ich verwende diese

if (!is_object($_SESSION)) $_SESSION = new ArrayObject(); 
Verwandte Themen