[解決済み] 静的クラスとインスタンス化クラスの使い分け
質問
PHPは私の初めてのプログラミング言語です。静的クラスとインスタンス化されたオブジェクトの使い分けがよくわかりません。
オブジェクトの複製やクローンができることは承知しています。しかし、私がPHPを使ってきた中で、どんなオブジェクトや関数も必ず1つの戻り値(配列、文字列、int)かvoidで終わっていました。
ゲームのキャラクタークラスのような概念を本で理解している。 車のオブジェクトを複製し、新しいものを赤色にする。 しかし、PHPやWebアプリケーションでの応用は、そうではありません。
簡単な例です。ブログです。ブログのどのオブジェクトを静的またはインスタンス化されたオブジェクトとして実装するのがベストでしょうか?DBクラス?グローバルスコープでdbオブジェクトをインスタンス化すればいいのでは?なぜ、すべてのオブジェクトを静的オブジェクトにしないのでしょうか?パフォーマンスはどうでしょうか?
スタイルだけなのでしょうか?こういうのって、ちゃんとしたやり方があるんでしょうか?
どのように解決するのですか?
これは非常に興味深い質問です。そして、その答えもまた興味深いものになるかもしれません^^。
最もシンプルな考え方は、次のようなものでしょう。
- インスタンス化されたクラスを使用し、各オブジェクトがそれ自身のデータを持つ(ユーザーが名前を持つように)。
- 静的なクラスは、他のものの上で動作するツールに過ぎない場合に使用します(例えば、BBコードからHTMLへの構文変換器;それ自体では生命を持たない)。
(ええ、認めます。本当に本当に簡略化しすぎです...)
静的メソッド/クラスについて1つ言えることは、ユニットテストを容易にしないということです (少なくともPHPでは。おそらく他の言語でも)。
MyClass::$myDataに何らかの値を設定すると、その値を持つことになり、どこでもその値だけしか持たないことになります。
ブログのシステムとしては、どうでしょうか?DBアクセスのクラスはそうかもしれませんが、結局はそうではないでしょう^^。
関連
-
[解決済み】新しいPHPMailerはPHPMailerAutoload.phpが必要?
-
[解決済み】XAMPPのphpMyAdminで「設定にあるcontroluserの接続に失敗しました。
-
[解決済み] php5パッケージのインストール候補がない (Ubuntu 16.04)
-
[解決済み】foreach()に与えられた引数が無効です。)
-
[解決済み] Pythonで静的なクラス変数は可能ですか?
-
[解決済み] どのような場合に '$this' よりも 'self' を使うべきですか?
-
[解決済み] なぜList<T>を継承しないのですか?
-
[解決済み] Pythonのクラスはなぜオブジェクトを継承するのですか?
-
[解決済み] C++でクラスと構造体はいつ使い分けるべきか?
-
[解決済み] リファレンス - このシンボルはPHPで何を意味するのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】PHP定数「PHP_EOL」はいつ使うの?
-
[解決済み】予期せぬ例外。SQLSTATE[HY000] [1045] Access denied for user ****@'localhost' (using password: YES)
-
[解決済み】Apache + PHPで「ヘッダの前にスクリプトの出力が終了する」件
-
[解決済み】Xampp ローカルホスト/ダッシュボード
-
[解決済み】 $_SERVER['DOCUMENT_ROOT'] と $_SERVER['HTTP_HOST'] の違いについて]
-
[解決済み】PHPからPythonスクリプトを実行する
-
[解決済み】chromeの「net : Failed to load resource: net::ERR_SPDY_PROTOCOL_ERROR" は何がおかしいのか?
-
[解決済み】Wordpressの子テーマのstyle.cssが効かない。
-
[解決済み】書き込みコンテキストでメソッドの戻り値を使用することができない
-
[解決済み】mysqli::query(): mysqli をフェッチできない