1. ホーム
  2. php

[解決済み] 静的クラスとインスタンス化クラスの使い分け

2022-05-03 16:11:25

質問

PHPは私の初めてのプログラミング言語です。静的クラスとインスタンス化されたオブジェクトの使い分けがよくわかりません。

オブジェクトの複製やクローンができることは承知しています。しかし、私がPHPを使ってきた中で、どんなオブジェクトや関数も必ず1つの戻り値(配列、文字列、int)かvoidで終わっていました。

ゲームのキャラクタークラスのような概念を本で理解している。 車のオブジェクトを複製し、新しいものを赤色にする。 しかし、PHPやWebアプリケーションでの応用は、そうではありません。

簡単な例です。ブログです。ブログのどのオブジェクトを静的またはインスタンス化されたオブジェクトとして実装するのがベストでしょうか?DBクラス?グローバルスコープでdbオブジェクトをインスタンス化すればいいのでは?なぜ、すべてのオブジェクトを静的オブジェクトにしないのでしょうか?パフォーマンスはどうでしょうか?

スタイルだけなのでしょうか?こういうのって、ちゃんとしたやり方があるんでしょうか?

どのように解決するのですか?

これは非常に興味深い質問です。そして、その答えもまた興味深いものになるかもしれません^^。

最もシンプルな考え方は、次のようなものでしょう。

  • インスタンス化されたクラスを使用し、各オブジェクトがそれ自身のデータを持つ(ユーザーが名前を持つように)。
  • 静的なクラスは、他のものの上で動作するツールに過ぎない場合に使用します(例えば、BBコードからHTMLへの構文変換器;それ自体では生命を持たない)。

(ええ、認めます。本当に本当に簡略化しすぎです...)

静的メソッド/クラスについて1つ言えることは、ユニットテストを容易にしないということです (少なくともPHPでは。おそらく他の言語でも)。

MyClass::$myDataに何らかの値を設定すると、その値を持つことになり、どこでもその値だけしか持たないことになります。

ブログのシステムとしては、どうでしょうか?DBアクセスのクラスはそうかもしれませんが、結局はそうではないでしょう^^。