PHPの$_POSTを使うとテストがしにくい?言っていることがよくわからない。

$_POSTをプログラム中で使用するのはいけないのだろうか?

スーパーグローバル変数の上書き

どこからでもアクセスができるスーパーグローバル変数へ、プログラムコード上から上書きするのは最悪かもしれない。何が入っているのか、どこで値が入ったのか、わからなくなってしまう。しかし、参照するぐらいなら問題ないのではないだろうか?

テストのしづらさの解決

$_POSTはスーパーグローバルな変数なので、テストしたいパラメータを$_POSTに代入してしまえば、問題なくテストができる(キリッ)。先にも述べたとおり、スーパーグローバルな変数への上書きは気持ちが悪いが、「テスト時に限定する」と決めておけばよいのではないだろうか?

一般的なフレームワークでは…

プロパティrequestやstaticなメソッドにカプセル化する。そして引数として処理Modelに受け渡す。$_POSTのラッパーモデル化して、PHPのバージョンアップに備える($_POSTの変更に合わせてラッパーモデル/ラッパーメソッドを変更すれば、変化に強いよね)みたいな…

まとめ

考えた上で適切な対応ができるならば、$_POSTをそのまま参照型で使ったり、決まった用途で上書きしても、別にいいよね。

むしろ、そのためのスーパーグローバル変数なのだから。

もし$_POSTが定数だったり、スーパーグローバルでなく、なんかしらのオブジェクトだったら、別の理由で私達は(少なくとも私は)苦労していたに違いない。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です