PHP アドバンス

PHP オブジェクト指向プログラミング

1. PHP オブジェクト指向プログラミング (OOP)

PHPにおける OOP とは、Object-Oriented Programming(オブジェクト指向プログラミング) の略称です。

PHPのOOPは、コードを「プロパティ(属性)」と「メソッド(振る舞い)」を持つ クラス(Class)オブジェクト(Object) に整理して構成する手法です。これは、スケーラブルで再利用性が高く、メンテナンスのしやすいコードを構築するのに非常に適しています。

従来のプロシージャル(手続き型)プログラミングは、ステップ・バイ・ステップのアプローチに従い、コマンドを順次実行していきます。それに対して、オブジェクト指向プログラミングはクラスとオブジェクトを作成し、それらがどのように相互作用するかを設計することに重点を置いています。

1.1 プロシージャルと比較したオブジェクト指向のメリット

  • 実行速度と効率: OOPは実行が速く、実装の構造を把握しやすい。
  • 明確な構造: プログラムに対して明確な構造を提供できる。
  • DRY原則の維持: 「DRY (Don't Repeat Yourself)」原則を保つのに役立ち、コードのメンテナンス、修正、デバッグが容易になる。
  • 再利用性: 少ないコード量と短い開発時間で、完全に再利用可能なアプリケーションを作成できる。

Tip (DRY原則): "Don't Repeat Yourself" (DRY) 原則とは、コードの重複を避けるという考え方です。アプリケーション内で共通するコードを抽出し、一箇所にまとめて配置することで、同じコードを繰り返すのではなく、それを再利用するように設計します。

1.2 OOPを構成する主要な要素

PHPのOOPでは、以下の概念を用いてモジュール化され、保守性の高いコードを実現します。

  • クラスとオブジェクト (Classes and Objects): クラスはオブジェクトの設計図(テンプレート)であり、オブジェクトはそのクラスから生成された個別の実体(インスタンス)です。
  • カプセル化 (Encapsulation): アクセス修飾子(public, protected, private)を使用して、オブジェクトの内部状態へのアクセスを制御します。
  • 継承 (Inheritance): 既存のクラスからプロパティやメソッドを引き継ぎ、新しいクラスを作成できます。
  • 抽象化 (Abstraction): それ自体ではインスタンス化できないクラスで、他のクラスの設計図(ブループリント)として機能します。
  • インターフェース (Interfaces): 実装クラスが遵守しなければならない一連のメソッドを定義します。

2. クラスとオブジェクトとは何か?

クラスとオブジェクトは、オブジェクト指向プログラミングにおける2つの主要な側面です。

以下の例で、クラスとオブジェクトの違いを確認してみましょう。

クラス (Class)オブジェクト (Objects)
Fruit (果物)Apple, Banana, Mango
Car (車)Volvo, Audi, Toyota

つまり、クラスはオブジェクトのテンプレートであり、オブジェクトはクラスの個別のインスタンスです。

オブジェクトが作成される際、そのオブジェクトはクラスからすべてのプロパティとメソッドを継承しますが、各オブジェクトはプロパティに対して異なる値を保持することになります。