View Single Post
Old 10-02-2008, 06:49 AM   #4 (permalink)
nizzy
The Visitor
 
Join Date: Oct 2008
Posts: 3
Thanks: 0
nizzy is on a distinguished road
Default 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_2true) . ", 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 

?>
nizzy is offline  
Reply With Quote