Tworzymy klasę reprezentującą sesję użytkownika. Klasa będzie tylko statyczna, będzie też odwoływać się do swoich statycznych metod za pomocą słówka kluczowego self. Zaczynamy.
Nasza klasa ma być tylko statyczna, zatem musi mieć prywatny konstruktor:
<?php
class Session {
private function __construct(){}
}
Takiej klasy nie da się utworzyć. Możemy co najwyżej korzystać z jej statycznych metod.
Napiszmy je:
<?php
class Session {
private function __construct(){}
public static function start(){
if (session_status() == PHP_SESSION_NONE)
session_start();
}
public static function set($key, $value){
$_SESSION[$key] = $value;
}
public static function get($key, $default = null){
return isset($_SESSION[$key]) ? $_SESSION[$key] : $default;
}
public static function has($key){
return isset($_SESSION[$key]);
}
public static function clear($key){
if (isset($_SESSION[$key]))
unset($_SESSION[$key]);
}
public static function clearAll(){
session_unset();
session_destroy();
}
}
Pora na statyczne metody odwołujące się do innych statycznych metod. W przypadku metod „normalnych” korzystaliśmy ze słówka kluczowego this.
Tutaj nie ma miejsca dla this, bo nie ma możliwości utworzenia obiektu ani też nie ma niestatycznych metod (poza prywatnym konstruktorem).
O ile w przypadku metod statycznych używanych poza klasą, wykorzystywaliśmy scope resolution operator :: jak poniżej
Session::start();
W przypadku odwoływania się wewnątrz klasy do jej statycznych metod użyjemy słówka kluczowego self:
class Session {
//(...)
public static function set($key, $value){
$_SESSION[$key] = $value;
}
//(...)
public static function clear($key){
if (isset($_SESSION[$key]))
unset($_SESSION[$key]);
}
//(...)
public static function setFlashMessage($key, $message){
self::set('flash_' . $key, $message);
}
public static function getFlashMessage($key, $default = null){
$message = self::get('flash_' . $key, $default);
self::clear('flash_' . $key);
return $message;
}
}
Session::start();