PHPスーパーグローバルに直接アクセスする必要がないように、のラッパーSession
を作成したかったのです。Request
スーパーグローバルのラッパーを作成して使用すると、ラッパークラスをモックできるため、アプリケーションの単体テストが簡単になることに気付きました。
ラッパークラスを作成しようとしているときに、いくつかのサンプルラッパークラスを調べました。それらのいくつかは、初期化時にスーパーグローバルをクラスプロパティとして格納します。
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、とにかくラッパークラスがモックされるので、なぜスーパーグローバルをクラスプロパティとして保存するのが面倒なのですか?多くの人がこれを行う特別な理由はありますか?スーパーグローバルに直接アクセスするのではなく、ラッパーのプロパティとしてスーパーグローバルを保存する必要がありますか?
ご入力いただきありがとうございます。