免責事項: しばらく php を扱っていないため、構文が間違っている可能性があります。
OOP という用語は少しあいまいです。つまり、人によって、それを聞いたときにわずかに異なることを考えるという意味です。そのため、矛盾したことを聞いても混乱しないでください。
クラスを使用して同様の関数を一緒に構造化しても、コードが損なわれることはありませんが、基本的にはクラスを関数の名前空間として使用するだけです。通常、システムの一部の側面をカプセル化する方法でクラスを定義する必要があります。つまり、そのクラスのコードのみがその側面を直接処理する必要があり、他のすべての人はそのクラスを使用するだけです。
たとえば、印刷ジョブ キューを管理するクラスを作成できます。ドキュメントを印刷したいコードがある場合、ジョブがキューに入れられる方法や場所、またはプリンターに送信される方法を知る必要はありません。印刷ジョブ キュー オブジェクト ( と呼びましょう$jobQueue
)を知るだけで済みます。のようなメソッドを持つ場合があり$jobQueue->enqueue($document)
ます。
ここで、「そのコードはグローバル関数enqueueJob($document)
を使用することもできます」と主張するかもしれません。これは、複数のキュー (異なるプリンター用) と、異なる方法で動作するキュー (ジョブをデータベースに保存する) が必要になるまでは当てはまります。 、メモリ内、またはまったくない-ごみ箱に直接行くキューを想像してください:))。OOP では、この種のシナリオは問題ありません。これらの詳細は、ドキュメントを印刷するコードから完全に隠されています。気にする必要があるのは、enqueue
メソッドを持つジョブ キュー オブジェクトがあることだけです。
ジョブ キューのこの種の「互換性」を得るには、ジョブ キューに共通のインターフェイス (この場合はenqueue
メソッド) が必要です。これは、出力したいコードのすべてのニーズをカバーするように慎重に選択する必要があります。印刷キューがどのように機能するかについての仮定が多すぎます。たとえば、enqueue
メソッドがファイルの保存場所をキューに伝える引数としてファイル パスを受け取ると想像できますが、そのインターフェイスはデータベースで動作するキューには役に立ちません。これは、優れた抽象化を見つける技術です。
元の質問に戻ると、新しいクラスが提供するはずの抽象化/インターフェイスについて考えない限り、関連する関数をクラスにまとめることは、私の意見では実際には OOP ではありません。それがなければ、この新しいクラスを使用するすべてのコードはそれを使用するように配線され、別の種類のプリンター キューが必要であると判断した場合は、変更または再検討する必要があります。:)
ただし、「OOP ではない」ということは、「良い考えではない」ということとは異なります。私はそれに行き、あなたの機能を再配置すると言います。私の意見では、すべてがオブジェクトである必要はなく、何らかの抽象化に適合する必要はないことを心に留めておくことが重要です。しかし、共通のインターフェースに抽象化できる、似たようなこと (ファイル内のキュー、データベース内のキュー) を行う関数がいくつかあることに気付くかもしれません。