まず、一歩下がって、オブジェクト指向とは何かを学ぶことをお勧めします。「オブジェクト指向プログラミング」という用語を生み出した Alan Kay は、かつて次のように説明しました。
オブジェクトは、ネットワーク上の生体細胞や個々のコンピューターのようなもので、メッセージでのみ通信できると考えました。
(ソース)
PHP (およびほとんどのオブジェクト指向言語) では、これらのメッセージは通常、メソッド呼び出しであるか、パブリック プロパティの場合は値の取得と設定です。
したがって、システム内のオブジェクトは、必要なすべての動作を 1 つのオブジェクトにまとめようとするのではなく、より大きな目標を達成するために協力する、より大きな生物の個々の細胞と考えてください。
これは大きなトピックであり、多くの本が書かれていますが、あなたが質問で言及したオブジェクトに関して、まずそれらが分類されるさまざまなカテゴリを区別します。データベースまたはセッション オブジェクトは、他のオブジェクト (たとえば、MVC フレームワークを使用している場合はコントローラー) が依存する "サービス" の一種と考えることができます。他の人が述べたように、依存性注入はそのようなサービスを処理するための優れたソリューションですが、ほとんどの場合、ユーザーごとに1つのインスタンスが必要なユーザークラスのようなものに使用することはお勧めしません(もちろん文字通りではありません-あなた特定の要求を処理するために必要な特定のユーザー オブジェクトのみをメモリにロードします。多くの場合、現在のユーザーのインスタンスのみです)。
依存性注入の詳細については、Martin Fowler がこの用語を作り出したこの記事をお勧めします。また、Service Locator と呼ばれる依存性注入コンテナーのより簡単な代替手段についても言及しています。
(依存性注入コンテナーのアプローチはより堅牢ですが、より複雑でもあります。幸いなことに、そのための優れたオープンソース ライブラリがあります)。
ユーザー、記事、およびカテゴリはすべて、CMSのドメイン オブジェクトの例です。これらは、MVC (ドメイン モデルとも呼ばれる) の "M" (モデル) の一部です。もちろん、これらのオブジェクトをデータベースに出し入れする方法も必要なので、おそらく、ある種の Repository または Query クラスも必要になるでしょう (Repository クラスはサービスと見なすことができます)。すべての PHP システムが真のドメイン オブジェクトを持っているわけではありません。多くは、配列または stdClass オブジェクト (次のように作成された単純な匿名オブジェクト$someObj = new stdClass
) を返すリポジトリのようなクラスを持っています。
オブジェクト指向プログラミングの本当の目的は、私が上で述べたことよりもさらに深いところにあります。つまり、システム内のオブジェクトを、私たちのメンタル モデル (エンド ユーザーとプログラマーの両方の視点を含む共同のメンタル モデル) を反映するように設計することです。 . これは、MVC パターンを発明した Trygve Reenskaug からの別の良い引用です。
手続き指向プログラミングとオブジェクト指向プログラミングの違いは、手続き指向が「何が起こるか」という質問に答える点にあると私は考えています。オブジェクト指向は、「誰がそれを行うのか?」という追加の質問に答えます。(ソース)
最後に、PHP でのオブジェクト指向プログラミングを具体的に扱った本を読むことをお勧めします。Matt Zandstra によるPHP Objects, Patterns and Practiceは非常に優れたものです。