10-02-2008, 06:49 AM
|
#4 (permalink)
|
|
The Visitor
Join Date: Oct 2008
Posts: 3
Thanks: 0
|
I found my own solution
YES! you can store object instance into session AFTER session initialization.
THE WHOLE trick resides in these lines (requires php v5.1.3):
$reflection_obj = new ReflectionClass($class_name);
$obj_ins = $reflection_obj->newInstanceArgs($get_args);
PHP Code:
<?php
class FooBar
{
public $arg_1;
public $arg_2;
public $arg_3;
public function __construct($arg_1, $arg_2, $arg_3)
{
$this->arg_1 = $arg_1;
$this->arg_2 = $arg_2;
$this->arg_3 = $arg_3;
}
public function hello()
{
return "hello from __CLASS__, arg_1: " . $this->arg_1 . ", arg_2: " . print_r($this->arg_2, true) . ", arg_3: " . $this->arg_3;
}
}
class Session
{
public function __construct()
{
session_start();
}
public function SetObject($class_name)
{
unset($_SESSION[$class_name]);
if(!isset($_SESSION[$class_name]))
{
$num_args = func_num_args();
$params = array();
if($num_args == 1)
{
$obj_ins = new $class_name();
}
elseif($num_args > 1)
{
$get_args = func_get_args();
array_shift($get_args);
$reflection_obj = new ReflectionClass($class_name);
$obj_ins = $reflection_obj->newInstanceArgs($get_args);
}
$_SESSION[$class_name] = serialize($obj_ins);
}
}
public function GetObject($class_name)
{
if(isset($_SESSION[$class_name]))
{
$instance = unserialize($_SESSION[$class_name]);
if($instance instanceof $class_name)
{
return $instance;
}
}
}
}
$sess_handler =& new Session();
//storing class instance into session
$sess_handler->SetObject('FooBar', 'first_str', array('hey', 'budy'), true);
//getting class instance from session
$foo_bar = $sess_handler->GetObject('FooBar');
//var_dump($foo_bar);
echo $foo_bar->hello(); // this is a method in FooBar class
?>
|
|
|
|