<?php
class Session
{
const SESSION_STARTED = TRUE;
const SESSION_NOT_STARTED = FALSE;
// El estado de la sesión
private $sessionState = self::SESSION_NOT_STARTED;
// La única instancia de la clase
private static $instance;
private function __construct() {}
/**
* Devuelve la instancia de "sesión".
* La sesión se inicializa automáticamente si no existía.
*
* @return Objeto
**/
public static function getInstance()
{
if ( !isset(self::$instance))
{
self::$instance = new self;
}
self::$instance->startSession();
return self::$instance;
}
/**
* Inicia la sesión.
*
* @ Return bool TRUE si la sesión se ha inicializado, de lo contrario False.
**/
public function startSession()
{
if ( $this->sessionState == self::SESSION_NOT_STARTED )
{
$this->sessionState = session_start();
}
return $this->sessionState;
}
/**
* Carga datos de la sesión.
*
* @return Void
**/
public function __set( $name , $value )
{
$_SESSION[$name] = $value;
}
/**
* Obtiene datos de sesión.
*
**/
public function __get( $name )
{
if ( isset($_SESSION[$name]))
{
return $_SESSION[$name];
}
}
public function __isset( $name )
{
return isset($_SESSION[$name]);
}
public function __unset( $name )
{
unset( $_SESSION[$name] );
}
/**
* Destruye la sesión actual.
*
* @ Return bool TRUE si la sesión ha sido eliminada, de lo contrario False.
**/
public function destroy()
{
if ( $this->sessionState == self::SESSION_STARTED )
{
$this->sessionState = !session_destroy();
unset( $_SESSION );
return !$this->sessionState;
}
return FALSE;
}
}
// Obtenemos la instancia de sesion
$data = Session::getInstance();
// Carga datos en la sesión
$data->nickname = 'Someone';
$data->age = 18;
// Visualización de datos
printf( '<p>My name is %s and I\'m %d years old.</p>' , $data->nickname , $data->age );
/*
Se mostrará:
Array
(
[nickname] => Someone
[age] => 18
)
*/
printf( '<pre>%s</pre>' , print_r( $_SESSION , TRUE ));
// TRUE
var_dump( isset( $data->nickname ));
// Destruimos la sesión
$data->destroy();
// FALSE
var_dump( isset( $data->nickname ));
?>