はじめに
PHPには「抽象クラス」と「抽象メソッド」という仕組みがあります。これはオブジェクト指向を学ぶ上で必須の概念であり、PHP8上級試験でも頻出です。本記事では、抽象クラスの基本ルールから、実装を持ち越す場合の挙動までを整理し、サンプルコードで具体的に確認します。
目次
抽象クラスとは?
abstract class
で定義- new ではインスタンス化できない
- 共通の枠組み(インターフェイス的役割)を示すために利用され
抽象メソッドのルール
abstract
キーワードで宣言- 実装(中身)は書けない
- 最終的に具象クラスで必ず実装する必要がある
実装の持ち越し
- 抽象クラスを継承したクラスが再び抽象クラスであれば、未実装のまま「持ち越し」可能
- 具象クラスになった時点で、残っている抽象メソッドをすべて実装しなければならない
サンプルコード
<?php
declare(strict_types=1);
error_reporting(-1);
abstract class Hoge{
abstract public function test();
abstract public function test2();
}
abstract class Foo extends Hoge{
public function test(){
echo __METHOD__ , "\n";
}
}
class Bar extends Foo{
public function test2(){
echo __METHOD__ , "\n";
}
}
$obj = new Bar();
$obj->test();
$obj->test2();
実行結果
Foo::test
Bar::test2
まとめ
- 抽象クラスは インスタンス化できない
- 抽象メソッドは 最終的に全部実装が必要
- 持ち越しは抽象クラス同士でのみ可能
- 具象クラスで未実装があるとエラー