Temat: Opinia na temat bloga
Jest nieźle. Unikaj przepisywania dokumentacji na nowo. Powinieneś popracować nad OOP, ale tak to jest git ;)
Co do OOP...
1. Wsadzenie metod statycznych w klasę i opakowanie nimi funkcji to krok w dobrą stronę, ale potrzebny jest skok, a nie krok.
2. Zrefaktorowałem Twoją klasę, teraz wygląda tak...
<?php
/**
* @author Łukasz Socha <kontakt@lukasz-socha.pl>
* @version: 1.0
* @license http://www.gnu.org/copyleft/lesser.html
*/
/**
* This class includes methods for session operation.
*
* @package Core
*/
class Session {
public static function start()
{
if( !self::isSessionStarted() )
{
session_start();
}
}
public static function isSessionStarted()
{
return (bool)self::getSessionId();
}
public static function getSessionId()
{
return session_id();
}
public static function set($name, $value, $namespace='default')
{
self::start();
if( !self::namespaceExists($namespace) )
{
$_SESSION[$namespace] = array();
}
$_SESSION[$namespace][$name]=$value;
}
public static function namespaceExists($namespace)
{
self::start();
return array_key_exists($namespace, $_SESSION);
}
public static function exists($name, $namespace='default')
{
self::start();
return array_key_exists($name, $_SESSION[$namespace]);
}
public static function get($name, $default = null, $namespace='default')
{
self::start();
if( self::exists($name, $namespace) )
{
return $_SESSION[$namespace][$name];
}
return $default;
}
public static function getAndDelete($name, $default = null, $namespace='default')
{
self::start();
$var = self::get($name, $default, $namespace);
self::delete($name, $namespace);
return $var;
}
public static function delete($name, $namespace='default')
{
self::start();
if( self::exists($name, $namespace) )
{
unset($_SESSION[$namespace][$name]);
}
}
public static function deleteNamespace($namespace='default')
{
self::start();
unset($_SESSION[$namespace]);
}
public static function deleteAll()
{
self::start();
$_SESSION=array();
}
public static function destroy()
{
self::start();
self::deleteAll();
session_destroy();
}
public static function getName($name=null)
{
self::start();
session_name($name);
}
}
Nie chciało mi się już zmieniać wszystkiego, ale zamiast get(), set() powinno być raczej getVariable()/setVariable() itp. To samo przy start()/destroy() - startSession(), destroySession() - ponieważ mieszasz metody odpowiedzialne za obsługę różnych rzeczy. De facto to pseudo-przestrzeń nazw, nie klasa.
O wiele lepiej byłoby zrobić to jako klasę niestatyczną i zaimplementować multiton.
3. Nie zamykaj kodu ?>
4. Większość Twoich komentarzy zaśmieca klasę.
........
Lecę, powodzenia ;)
Łukasz K. edytował(a) ten post dnia 02.09.11 o godzinie 13:05