Я хотел создать оболочку для Session
и Request
, чтобы у меня не было доступа к суперглобалам PHP напрямую.Я понял, что если я создаю оболочку для суперглобалей и использую их, модульное тестирование моего приложения будет проще, поскольку класс оболочки может быть смоделирован.
Пытаясь создать класс оболочки, я исследовал некоторые примеры классов оболочки.,Некоторые из них хранят суперглобальный элемент как свойство класса при инициализации:
class Session
{
protected $vars;
public function __construct()
{
session_start();
// POINT OF INTEREST
// Store the superglobal as a class property
$this->vars = $_SESSION;
}
public function get($index)
{
// POINT OF INTEREST
// Accesses the class property instead of the superglobal
return $this->vars[$index];
}
public function write($index, $value)
{
// Writes both class property and session variable
$this->vars[$index] = $value;
$_SESSION[$index] = $value;
}
}
Мой вопрос: есть ли какая-то особая причина, по которой при создании класса-оболочки мы сохраняем суперглобальный элемент как свойство класса вместо прямого доступа к ним??Сравните приведенный выше код с этим:
class Session
{
public function __construct()
{
session_start();
}
public function get($index)
{
// Accesses the superglobal directly
return $_SESSION[$index];
}
public function write($index, $value)
{
// Accesses the superglobal directly
$_SESSION[$index] = $value;
}
}
IMO, так как класс-оболочка все равно будет подвергнут ложной проверке, зачем беспокоиться о сохранении суперглобальных переменных как свойства класса?Есть ли конкретная причина, почему так много людей делают это?Стоит ли хранить суперглобальные переменные как свойство в их оболочке вместо прямого доступа к нему?
Спасибо за любой ввод.