抽象クラス

PHPにおける「抽象クラス(abstract class)」は、オブジェクト指向プログラミングにおいて、共通の機能やインターフェースを持つクラスの基本的な構造を定義するために使用されます。抽象クラスは、直接インスタンス化することはできず、継承によって具体的なクラスでその機能を実装することを前提としています。


1. 抽象クラスの特徴

  • インスタンス化不可
    抽象クラス自体からオブジェクトを生成することはできません。

  • 抽象メソッドの定義が可能
    メソッドのシグネチャ(名前・引数・戻り値の型)だけを定義し、処理内容(本体)は記述しないメソッドを持てます。このメソッドは、継承したクラスで必ずオーバーライド(上書き)して実装しなければなりません。

  • 具体的なメソッドやプロパティも持てる
    通常のクラスと同様に、処理内容を持ったメソッドやプロパティも定義できます。


2. 構文

php
abstract class Animal { protected $name; public function __construct($name) { $this->name = $name; } // 抽象メソッド(サブクラスで必ず定義する必要あり) abstract public function makeSound(); // 具体的なメソッド public function getName() { return $this->name; } }

上記のような抽象クラスを継承して、具体的なクラスを作成する必要があります。

php
class Dog extends Animal { public function makeSound() { return "ワンワン"; } } $dog = new Dog("ポチ"); echo $dog->getName(); // 出力: ポチ echo $dog->makeSound(); // 出力: ワンワン

3. 抽象クラスの使用目的

  • 共通のインターフェースを強制するため
    継承クラスで特定のメソッドが必ず実装されることを保証します。

  • コードの再利用
    共通処理を抽象クラスにまとめ、継承クラスで再利用することができます。

  • 設計の明確化
    共通のベースとなるクラスを明示することで、プログラム構造の可読性と保守性が向上します。


4. インターフェースとの違い

比較項目 抽象クラス インターフェース
メソッド実装 一部実装可能 一切実装不可(PHP 8.0以降はdefault実装可)
プロパティ定義 PHP 7.xまでは不可(PHP 8.1以降は定義可)
継承 単一継承のみ 複数実装可能

まとめ

抽象クラスは、**「共通の性質と振る舞いを持つクラス群のひな型」**として用いられ、サブクラスで具体的な実装を強制する際に有効です。オブジェクト指向設計の中でも、インターフェースより柔軟で、かつ共通処理を含めたい場合に特に適しています。

生成日:2025/05/03