4

重複の可能性:
レジストリの設計パターン…良いか悪いか?

私は PHP を使用するゲーム スクリプトに取り組んでおり、多くの Web サイトを構築する方法と同様の方法でアプローチしています。私は、実行に重要な他の多くの変数を保持する stdClass である単一の変数を宣言する習慣があります。次に、関数内で何かが必要になった場合 (パラメーターで渡されない場合)、単純にグローバル $variable (この場合は $ar) を使用します。

$ar = new stdClass;
$ar->i = new stdClass;
$ar->s = new stdClass;

$ar->i->root = "/home/user";

/* Directory where log files are to be stored. */
$ar->i->logs = "{$ar->i->root}/logs";

/* Directory where the banlist is. */
$ar->i->bl = "{$ar->i->root}/customize/settings/bannedaccounts.txt";

/* Directory where the silencelist is. */
$ar->i->sl = "{$ar->i->root}/customize/settings/silencedaccounts.txt";

/* How many points should be awarded for 1st place, 2nd place... etc. */
$ar->s->points = array(10, 7, 5, 4, 3, 2, 1, 1, 1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1);

したがって、上記の変数のいずれかを関数で使用する場合は、次のようにアプローチします。

public function run() {
  global $ar;
  //do something with the variable..
}

これをしないようにアドバイスする人はいますか?単一の変数を使用し、それを多くの関数に含めることは避けるべき悪い習慣ですか? 指定されたパラメーターだけで機能する関数を作成することが望ましいことはわかっていますが、プログラミングの明確さではなく、PHP のパフォーマンスに関してこれを求めています。ありがとう!

4

1 に答える 1

1

オブジェクトを表すために集まったデータの要素は、オブジェクトである必要があります。無関係なものがある場合は、同じオブジェクトに詰め込まないでください。

グローバル スコープが必要な場合 (通常は必要ありません)、 を使用できます$GLOBALS。ただし、ほとんどのプロジェクトでは、OOP の原則に従うことをお勧めします。少なくとも、関数パラメーターを使用します。

それらの変数を必要とするような関数のライブラリがある場合run()(または、単にrun()!)、それらの変数がそのクラスのメンバーであるユーティリティ クラスを用意します。

于 2013-01-10T04:36:53.867 に答える