3

最近、私は独自の PHP フレームワークを作成しようとしていますが、そこから学ぶためです (より大きく、より堅牢なプロダクション用のフレームワークを検討する可能性があるため)。私が現在持っている設計コンセプトの 1 つは、ほとんどのコア クラスは主にクラス内の静的関数で動作するというものです。

数日前、「静的メソッドはテスト容易性を損なう」という記事をいくつか見ました。これは私を心配していました..ええ..私のクラスにはほとんど静的メソッドが含まれています..私が静的メソッドを使用していた主な理由は、多くのクラスが複数のインスタンスを必要とせず、静的メソッドはグローバルスコープで簡単にアプローチできるためです. . 静的メソッドは実際には最善の方法ではないことに気付きました。より良い代替手段を探しています。

構成アイテムを取得する次のコードを想像してください。

$testcfg = Config::get("test"); // Gets config from "test"
echo $testcfg->foo; // Would output what "foo" contains ofcourse.

/*
 * We cache the newly created instance of the "test" config,
 * so if we need to use it again anywhere in the application,
 * the Config::get() method simply returns that instance.
 */

これは私が現在持っているものの例です。しかし、いくつかの記事によると、これは悪いことです。
これで、たとえば CodeIgniter がこれを行う方法と同じように、次のように実行できます。

$testcfg = $this->config->get("test");
echo $testcfg->foo;

個人的には、これは読みにくいと思います。だからこそ、私は別の方法を好むでしょう。

要するに、クラスへのより良いアプローチが必要だと思います。構成クラスに複数のインスタンスは必要なく、読みやすさを維持し、クラスに簡単にアクセスできます。何か案は?

ランダムなアイデアではなく、コードサンプルを含むベストプラクティスまたは何かを探していることに注意してください。また、$this->class->method スタイル パターンにバインドされている場合、これを効率的に実装できますか?

4

2 に答える 2

0

魔法の方法__get()が役に立ちます:とについての例を参照してください。__set()

また、名前空間も確認する必要があります。静的メソッドのみを持つ一部のクラスを取り除くのに役立つ場合があります。

于 2013-05-22T20:12:03.057 に答える