1

私は PHP でアプリを作成しており、ツールボックスと呼んでいるクラス内にさまざまな関数のコレクションを集めています。

Class toolbox {
  public function misc($var) {
    return do_something($var);
  } 
}

さまざまなスクリプト内にツールボックスをロードして使用していますが、ベストプラクティスがどうあるべきかわかりません...

オプション 1: オブジェクト メソッドの呼び出し

__construct() {
  require_once('toolbox.php');
  $this->ToolBox = new toolbox;
}

some_function($input){
  return $this->ToolBox->misc($input);
}

オプション 2: クラス メソッドの呼び出し

__construct() {
  require_once('toolbox.php');
}

some_function($input){
  return ToolBox::misc($input);
}

それについて何らかのベストプラクティスはありますか?ツールボックスのさまざまなインスタンスが必要だとは思いません。

4

1 に答える 1

0

それらを静的関数にします。

class Toolbox {
    static public function Tool1(){
    }
}
Toolbox::Tool1(); // Call the static method without instantiating the object

なぜ名前空間ではなく静的クラスなのですか?

静的ユーティリティ クラスは成長する傾向があり、多くなる傾向があるためです。filesstringarrayなどに1 つある場合があります。それぞれが 5K 行またはそれ以上を簡単にジャンプできます。でも、いつも使っていますか?いいえ!サイトの 5% のページで使用されている可能性があります。では、なぜそれらを最初に含めるのでしょうか。

PHP の Autoload^ がここで役立ちます。ただし、オートロードはクラスでのみ機能し名前空間を含める必要があります。次の 3 つの選択肢があります。

  • you include/ EVERYTHING であるため、名前空間に常にアクセスできるようにしますが、実行のたびに PHP に多くのファイルを強制的に解析させ、実際に/ファイルrequireの固有のパフォーマンス ペナルティを取得します。includingrequiring
  • ユーティリティクラスを使用する各ファイルにinclude_once/を保持しますrequire_once.php
  • spl_autoload_registerオートローダーがバックグラウンドで面倒な作業を行っている間、依存関係を忘れて使用します

最初の 2 つは名前空間で動作しますが、最後の 2 つは静的クラスを必要とします。コードベースが大きく成長すると、他の人autoloadが何を言っても、あなたは感謝し始め、静的クラスを評価し始めます。そう:

best practices == guidelines && best practices != mandatory practices
best practices != what works best in your specific scenario

^今すぐ反対票の準備をしてください :)

于 2013-07-05T16:59:55.663 に答える