PHP は私の最初のプログラミング言語です。静的クラスとインスタンス化されたオブジェクトをいつ使用すればよいのか、よくわかりません。
オブジェクトを複製したりクローンしたりできることはわかっています。しかし、私が PHP を使っていた間、オブジェクトや関数は常に単一の戻り値 (配列、文字列、int) または void になっていました。
私はビデオゲームのキャラクタークラスのような本の概念を理解しています。車のオブジェクトを複製し、新しいものを赤にする、それはすべて理にかなっています。しかし、PHP および Web アプリでの適用は理にかなっていません。
簡単な例。ブログ。ブログのどのオブジェクトを静的オブジェクトまたはインスタンス化されたオブジェクトとして実装するのが最適でしょうか? DB クラスでしょうか? グローバル スコープで db オブジェクトをインスタンス化しないのはなぜでしょうか? 代わりにすべてのオブジェクトを静的にしないのはなぜでしょうか? パフォーマンスはどうでしょうか?
それはすべて単なるスタイルですか? これを行う適切な方法はあるのでしょうか?
ベストアンサー1
これはかなり興味深い質問です。そして答えも興味深いものになるかもしれません ^^
物事を考える最も簡単な方法は次のようになります。
- 各オブジェクトが独自のデータを持つインスタンス化されたクラスを使用する(ユーザーに名前があるように)
- 静的クラスは、他のものを処理するツールとしてのみ使用する(たとえば、BB コードを HTML に変換する構文コンバータなど、それ自体では機能しないもの)
(ええ、本当に単純化しすぎだと認めます...)
静的メソッド/クラスに関する 1 つの問題は、ユニット テストが容易にならないことです (少なくとも PHP ではそうですが、おそらく他の言語でも同様です)。
静的データに関するもう 1 つの特徴は、プログラム内に静的データのインスタンスが 1 つしか存在しないことです。MyClass::$myData をどこかの値に設定すると、どこにいてもこの値だけを持つことになります。ユーザーについて言えば、ユーザーは 1 人しか持てません。これはあまり良いことではありませんよね。
ブログ システムについては、何と言えばいいでしょうか。実際、静的に記述するものはあまりないと思います。DB アクセス クラスはそうかもしれませんが、結局はそうではないでしょう ^^