我想为 and 创建一个包装器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,既然包装类无论如何都会被嘲笑,为什么还要将超全局变量存储为类属性呢?有这么多人这样做的特殊原因吗?我应该将超全局变量作为属性存储在它们的包装器中而不是直接访问它吗?
感谢您的任何意见。