lbondodesc
@lbondodesc
PHP Developer

PHP. Правильный подход для создания класа для работы с сессеями?

Здравствуйте! Хочу реализовать свою надстройку для работы с сессиями в PHP. На даном этапе возник вопрос как реализовать методы session_start(); и session_destroy(); . Подскажите пожалуйста в каком направлении двигатся! Что ещё можно добавить к класу? Спасибо!
class Session
{
	
	protected function getFront()
	{
		$front = Front::getInstance();
		return $front;
	}	
	
	public function getSession()
	{
		//return $this->getFront()->getController();
	}
	
	public function __call($name, $args) 
    {
    	
    	$key = getUnderscoresSeparatedFormat(substr($name, 3, strlen($name)));
	    if (strpos($name, 'get') === 0){
	    	
	    		if (empty ($args[0])) $args[0] = NULL;
	        	return $this->get($key, $args[0]);
	    }
	    if (strpos($name, 'set') === 0){
	    		if (empty($args[0])) $args[0] = NULL;
	        	return $this->set($key, $args[0]);
	    }        	
    }
    
    public function set($key, $value) 
    {
    	if (isset($_SESSION[$key])){
    		throw new Exception ("Unable to set Session var! " . $key . ' already exists!');
    	} else {
    		$_SESSION[$key] = $value;
    		return true;
    	}
    }
   
	public function get($key, $defaultValue = NULL) 
    {	
    	if (isset($_SESSION[$key])){
    		return $_SESSION[$key];
    	}
    	
    	return $defaultValue;
    }
}
  • Вопрос задан
  • 2908 просмотров
Решения вопроса 2
@japanxt
Cлишком много у вас делает класс сессий, сделать можно все проще.
<?php
class Session
{

    protected function tryLoadSession()
    {
        if (empty($_SESSION)) {
            session_start();
        }
    }
    
    public function get($name)
    {
        $this->tryLoadSession();
        
        if (empty($_SESSION[$name])) {
            return null;
        }
        
        return $_SESSION[$name];
    }
    
    public function set($name, $value)
    {
        $this->tryLoadSession();
        
        $_SESSION[$name] = $value;
    }
}

$session = new Session;
$session->get('user_id');
$session->set('user_id', 100500);

Код для примера, возможно он не работает
Ответ написан
toxa82
@toxa82
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
FanatPHP
@FanatPHP
Чебуратор тега РНР
Структура кода никуда не годится. Архитектуру надо строить по образцу вот этого фреймворка: https://github.com/Herzult/SimplePHPEasyPlus
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы