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

1.オブジェクト指向の基礎
1.1. オブジェクト指向とは何か
- 定義:: 現実世界の「もの(object)」をプログラム内でモデル化し、状態(プロパティ)と振る舞い(メソッド)を一体化した構造で表現する考え方。
- 狙い : 「変更に強い設計」と「コード再利用の促進」。アルゴリズム(関数)とデータ(配列・変数)が分離していた手続き型に比べ、相互依存を局所化できる。
- メリット
- カプセル化で内部実装の漏れを防ぎ、インターフェース(公開 API)のみを意識した利用が可能
- 継承で共通機能を親クラスに集約し、重複コードを排除
- ポリモーフィズムで「同じメッセージに対する多様な振る舞い」を実現し、拡張時の修正範囲を最小化
1.2. 三大要素(カプセル化・継承・ポリモーフィズム)
要素 | 意味 | PHP での代表的な機能 | 効果 |
---|
カプセル化 | 状態と振る舞いの隠蔽・公開範囲の明確化 | public / protected / private 修飾子 | 実装を変えても利用側コードに影響しにくい |
継承 | 既存クラスを拡張して新機能を追加 | extends と parent:: | 共通処理の再利用、一貫したインターフェース |
ポリモーフィズム | 同じ呼び出しで異なる型のオブジェクトを扱える | インターフェース、抽象クラス、__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 アプリケーションの複雑化に耐えうる設計が可能になりました。