グローバルを使用すると、コードのテストが困難になり、バグが発生しやすくなり、安全で予測不可能になります。そのため、関数/オブジェクト内で必要な変数を渡します。だから私の質問は簡単です:
$ _POST、$ _ GETなどはカプセル化の原則に違反していますか?
これらの変数の制御をオブジェクト指向の方法で維持するには、理想的な解決策は次のような行をコードに追加することだと思います。
// Convert the $_GET array to an object
$get = json_decode(json_encode($_GET), FALSE); // stackoverflow.com/a/1869147
// Stop it from being included from anywhere
unset($_GET);
// Small example of what could be done later on
$DB = new PDO(/* ... */);
$Person = new Person($DB, $get->id);
これはどこにも見たことがなく、チュートリアルも推奨もしていません。また、上記のコードは、モックオブジェクトを使用できるため、インクルードしたコード$Person = new Person($DB, $_GET['id']);
や(醜い)コードよりもはるかにテストが簡単であることを明確に確認$Person = new Person($DB);
でき$get
ます。
上記のコードは正しい方向にありますか、それとも何か不足していますか?
編集:アレクサンダークズミンが示唆したようにいくつかの調査(ZendフレームワークとCake PHP)の後、それは行くのが正しいようです。それらはおそらく私がコードATMを掘り下げるには大きすぎるが、私はそれを覚えておきます。