PHP初心者必見!抽象クラスの基本と活用法を5つのステップで徹底解説

PHP初心者向け抽象クラスの活用法解説記事のサムネイルPHP
この記事は約6分で読めます。

【サイト内のコードはご自由に個人利用・商用利用いただけます】

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

基本的な知識があればサンプルコードを活用して機能追加、目的を達成できるように作ってあります。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を凌駕する現役のプログラマチームによって監修されています。

サイト内のコードを共有する場合は、参照元として引用して下さいますと幸いです

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

この記事を読むと、PHPの抽象クラスの基本的な作り方と使い方、さらに応用例までを理解することができます。

初心者の方でも安心して読み進めることができるように、具体的なサンプルコードを交えながら解説します。

●抽象クラスとは

抽象クラスとは、PHPのオブジェクト指向プログラミングにおける重要な概念の一つです。

抽象クラスは具体的な実装を持たないメソッド、つまり抽象メソッドを持つことができ、その抽象メソッドは継承先の具象クラスで必ず実装する必要があります。

これにより、一定のインターフェースを保証しつつも、具体的な動作はサブクラスに委ねることができます。

●抽象クラスの作り方

PHPで抽象クラスを作成するには、クラス宣言の前にabstractキーワードを使用します。

また、抽象メソッドを定義する際にもabstractキーワードを使用します。

○サンプルコード1:抽象クラスの基本的な作り方

このコードでは、PHPで抽象クラスを作成する基本的な方法を示しています。

この例では、AbstractClassという名前の抽象クラスを定義し、抽象メソッドabstractMethodを定義しています。

<?php
abstract class AbstractClass {
    // 抽象メソッドの宣言
    abstract protected function abstractMethod();
}
?>

●抽象クラスの使い方

抽象クラス自体はインスタンス化することはできません。

その代わり、具体的なクラスを抽象クラスから派生させ、抽象メソッドをオーバーライドして使用します。

○サンプルコード2:抽象クラスを継承するクラスの作成

このコードでは、先ほど作成したAbstractClassを継承したConcreteClassを作成しています。

そして、abstractMethodをオーバーライドして具体的な実装を提供しています。

<?php
class ConcreteClass extends AbstractClass {
    // 抽象メソッドのオーバーライド
    protected function abstractMethod() {
        echo "This is a concrete method.";
    }
}
?>

○サンプルコード3:抽象メソッドのオーバーライド

このコードでは、抽象メソッドをオーバーライドするためのプロセスを示しています。

ConcreteClassAbstractClassを継承し、その中でabstractMethodをオーバーライドしています。

<?php
class AnotherConcreteClass extends AbstractClass {
    // 抽象メソッドのオーバーライド
    protected function abstractMethod() {
        echo "This is another concrete method.";
    }
}
?>

●抽象クラスの応用例

抽象クラスは、異なるクラス間で共通のインターフェースを提供するために使用します。

抽象メソッドを介して各クラスがどのようなメソッドを実装するべきかを定義し、その具体的な実装は各クラスに任せます。

○サンプルコード4:抽象クラスを利用したプログラムの設計

このコードでは、異なるクラスに共通のインターフェースを提供するための抽象クラスの使用例を示しています。

Animalという抽象クラスが定義され、その抽象メソッドmakeSoundDogクラスとCatクラスで異なる形で実装されています。

<?php
abstract class Animal {
    abstract public function makeSound();
}

class Dog extends Animal {
    public function makeSound() {
        echo "Woof!\n";
    }
}

class Cat extends Animal {
    public function makeSound() {
        echo "Meow!\n";
    }
}
?>

○サンプルコード5:抽象クラスとインターフェイスの組み合わせ

このコードでは、抽象クラスとインターフェイスを組み合わせて使用する例を示しています。

PrintableインターフェイスとAbstractDocument抽象クラスが定義され、それぞれがPdfDocumentクラスで実装されています。

<?php
interface Printable {
    public function printDocument();
}

abstract class AbstractDocument {
    abstract protected function getTitle();
}

class PdfDocument extends AbstractDocument implements Printable {
    protected function getTitle() {
        return "PDF Title";
    }

    public function printDocument() {
        echo $this->getTitle();
    }
}
?>

●抽象クラスの注意点と対処法

抽象クラスを使用する上での主な注意点は2つあります。

1つ目は、PHPは多重継承をサポートしていないため、1つのクラスは1つの抽象クラスしか継承できない点です。

2つ目は、抽象クラスに定義された全ての抽象メソッドは、そのクラスを継承する具象クラスで必ず実装する必要がある点です。

これらの制約を克服するための一つの解決策は、インターフェースの使用です。

クラスは複数のインターフェースを実装することができ、インターフェースにはメソッドのシグネチャ(名前、引数の型と数、戻り値の型)のみを定義することができます。

●抽象クラスのカスタマイズ方法

抽象クラスのカスタマイズは、主に抽象メソッドのオーバーライドによって行われます。

具体的には、抽象クラスを継承した具象クラスで、抽象メソッドに具体的な実装を提供します。

これにより、同じ抽象クラスを基にした異なる具象クラスが、同じメソッド名で異なる振る舞いをすることが可能になります。

また、抽象クラス自体にも、すべての具象クラスで共有されるメソッドやプロパティを定義することができます。

これにより、コードの再利用性を高めることができます。

まとめ

抽象クラスは、PHPのオブジェクト指向プログラミングにおける強力な概念です。

適切に使用することで、コードの再利用性を高め、メンテナンス性を向上させることができます。

この記事を通じて、抽象クラスの基本的な使い方と応用例、注意点と対処法、カスタマイズ方法について理解できたことと思います。

これらの知識を活かして、より良いPHPのコードを書くことができるでしょう。