【6日でできるPHP入門】オブジェクト指向とは

 オブジェクト指向(Object-Oriented Programming: OOP)は、「データ(状態)と振る舞い(処理)を “オブジェクト” という一つの単位にまとめる 設計手法です。PHP 8 以降では従来の手続き型に加え、クラス/インターフェース/トレイトなど豊富な OOP 機能が用意されており、保守性・再利用性・拡張性に優れた Web アプリケーション開発を実現できます。ここでは、OOP の基本概念から PHP での活用方法、クラス設計の実践ポイントまでを体系的に解説します。

1.オブジェクト指向の基礎

1.1. オブジェクト指向とは何か

  • 定義:: 現実世界の「もの(object)」をプログラム内でモデル化し、状態(プロパティ)と振る舞い(メソッド)を一体化した構造で表現する考え方。
  • 狙い : 「変更に強い設計」と「コード再利用の促進」。アルゴリズム(関数)とデータ(配列・変数)が分離していた手続き型に比べ、相互依存を局所化できる。
  • メリット
    • カプセル化で内部実装の漏れを防ぎ、インターフェース(公開 API)のみを意識した利用が可能
    • 継承で共通機能を親クラスに集約し、重複コードを排除
    • ポリモーフィズムで「同じメッセージに対する多様な振る舞い」を実現し、拡張時の修正範囲を最小化

1.2. 三大要素(カプセル化・継承・ポリモーフィズム)

要素意味PHP での代表的な機能効果
カプセル化状態と振る舞いの隠蔽・公開範囲の明確化public / protected / private 修飾子実装を変えても利用側コードに影響しにくい
継承既存クラスを拡張して新機能を追加extendsparent::共通処理の再利用、一貫したインターフェース
ポリモーフィズム同じ呼び出しで異なる型のオブジェクトを扱えるインターフェース、抽象クラス、__toString() など拡張に強く柔軟なコード

2.クラスとオブジェクト

2.1. クラス(設計図)

  • 役割 : プロパティとメソッドをまとめて定義し、共通仕様を明文化するテンプレート。
  • 設計観点:: 責務を一つに絞る「単一責務の原則(SRP)」、他クラスとの結合度を下げる「インターフェース駆動開発」など。

2.2. オブジェクト(インスタンス)

  • 生成 : クラスを基に new キーワードで作成される「実体」。
  • 特徴 : 各オブジェクトは同じクラスでも独立した状態(プロパティ値)を保持し、メソッド実行時には自身の状態を参照できる。

2.3. クラスとオブジェクトの対比

観点クラスオブジェクト(インスタンス)
立場設計図実体(量産可能)
保存場所コード(定義)実行時メモリ
生成数1 つ0 ~ N 個
例え自動車の製造図面実際に走る自動車

3.メンバの種類とアクセス制御

3.1. プロパティ(状態)とメソッド(振る舞い)

名称役割例(自動車オブジェクト)
プロパティオブジェクトが保持するデータ速度、燃料残量、車体色
メソッドオブジェクトを操作する手続き発進する、停止する、方向転換する。

3.2. アクセス修飾子

  • public : どこからでもアクセス可。
  • protected : クラス自身と継承先のみ。
  • private : 定義クラス内部限定。
  • 適切な可視性設定は「カプセル化」を強固にし、外部から直接状態を改変させない堅牢なクラス設計を実現。

4.PHP におけるオブジェクト指向の実践ポイント

4.1. 名前空間とファイル分割

  • 名前空間(namespace) を用いて同名クラスの競合を回避しつつ論理的に整理。
  • 1 クラス 1 ファイルを基本に、PSR-4 に準拠した自動ロード(Composer のオートローダー)で依存を解決。

4.2. 型宣言と属性(8.1+)

  • スカラー型宣言戻り値型 でバグを事前検知。
  • PHP 8.1 以降の 読み取り専用プロパティ(readonly) で不変データを保証。
  • 属性(Attribute) を用いてメタデータを明示し、アノテーション処理を簡潔化。

まとめ

 オブジェクト指向は「データ+振る舞い」を一体化し、変更に強いソフトウェア を構築するための中心的パラダイムです。PHP ではクラス・インターフェース・トレイト・属性といった言語機能が進化し、Web アプリケーションの複雑化に耐えうる設計が可能になりました。