カテゴリ: PHP 更新日: 2025/12/29

PHP の継承(extends)を使ったクラスの拡張方法

PHP の継承(extends)を使ったクラスの拡張方法
PHP の継承(extends)を使ったクラスの拡張方法

新人と先輩の会話形式で理解しよう

新人

「PHPの継承(extends)ってよく聞きますけど、どういうものなんですか?」

先輩

「継承は、あるクラス(親クラス)の機能を別のクラス(子クラス)で再利用するための仕組みだよ。親クラスの機能をそのまま使ったり、子クラスで独自に追加や変更ができるんだ。」

新人

「それは便利ですね!でも、どうやって使うのですか?」

先輩

「じゃあ、実際にコードで見てみよう!」

-

1. PHPの継承(extends)とは?(基本的な説明)

1. PHPの継承(extends)とは?(基本的な説明)
1. PHPの継承(extends)とは?(基本的な説明)

PHPの継承(extends)は、あるクラスが別のクラスの機能を引き継ぐ仕組みです。親クラスのプロパティやメソッドをそのまま子クラスに継承させることができ、コードの再利用性を高めます。

例えば、親クラスが「動物」で、子クラスが「犬」といった形で、「犬」は「動物」の機能をそのまま使えるという形です。


class Animal {
    public $name;

    public function speak() {
        echo "私は " . $this->name . " です。";
    }
}

class Dog extends Animal {
    public $breed;

    public function speak() {
        echo "私は " . $this->name . " という犬です。";
    }
}

$dog = new Dog();
$dog->name = "ポチ";
$dog->speak(); // 出力: 私は ポチ という犬です。

この例では、DogクラスがAnimalクラスを継承し、Dogクラスでspeak()メソッドをオーバーライドしています。親クラスのメソッドを子クラスで変更したり、新しいプロパティを追加したりできます。

2. 継承を使うことでできること

2. 継承を使うことでできること
2. 継承を使うことでできること

継承を使うことで、親クラスで定義した機能を子クラスで再利用できるため、コードの重複を減らすことができます。また、親クラスで変更を加えると、子クラスにも自動的に反映されるため、メンテナンスが容易になります。

例えば、同じような機能を持つ複数のクラスがあった場合、それぞれで同じコードを書く必要がなくなります。親クラスで共通の機能を定義し、子クラスで特有の動作を追加するだけです。


class Car {
    public $color;
    public $model;

    public function start() {
        echo "車をスタートしました";
    }
}

class ElectricCar extends Car {
    public function charge() {
        echo "電気自動車を充電中";
    }
}

$myCar = new ElectricCar();
$myCar->start(); // 車をスタートしました
$myCar->charge(); // 電気自動車を充電中

この例では、ElectricCarクラスがCarクラスを継承しており、親クラスのstart()メソッドをそのまま使っています。その上で、charge()メソッドを追加しています。

3. 継承を使ったクラスの拡張方法(親クラスと子クラス)

3. 継承を使ったクラスの拡張方法(親クラスと子クラス)
3. 継承を使ったクラスの拡張方法(親クラスと子クラス)

継承を使うことで、親クラスが持つ機能をそのまま子クラスで使用できるだけでなく、子クラスに新たな機能を追加したり、親クラスのメソッドを変更(オーバーライド)することもできます。

例えば、親クラスに「動物」というクラスを作り、そこから「犬」や「猫」などの動物クラスを派生させて、それぞれに特有の動作を追加することができます。


class Animal {
    public $name;

    public function speak() {
        echo $this->name . "が鳴いています。";
    }
}

class Dog extends Animal {
    public function speak() {
        echo $this->name . "がワンワンと鳴いています。";
    }
}

class Cat extends Animal {
    public function speak() {
        echo $this->name . "がニャーニャーと鳴いています。";
    }
}

$dog = new Dog();
$dog->name = "ポチ";
$dog->speak(); // 出力: ポチがワンワンと鳴いています。

$cat = new Cat();
$cat->name = "タマ";
$cat->speak(); // 出力: タマがニャーニャーと鳴いています。

この例では、親クラスAnimalが基本的なspeak()メソッドを提供し、子クラスのDogCatがそのメソッドをオーバーライドしています。これにより、動物の種類に応じた鳴き声を出力できます。

4. オーバーライドと親メソッドの呼び出し

4. オーバーライドと親メソッドの呼び出し
4. オーバーライドと親メソッドの呼び出し

オーバーライドとは、親クラスで定義したメソッドを子クラスで再定義して変更することです。これにより、親クラスと異なる動作を子クラスで実行できるようになります。

オーバーライドされた親メソッドを呼び出すには、parent::methodName()という書き方を使用します。


class Animal {
    public $name;

    public function speak() {
        echo $this->name . "が鳴いています。";
    }
}

class Dog extends Animal {
    public function speak() {
        parent::speak(); // 親クラスのメソッドを呼び出す
        echo $this->name . "がワンワンと鳴いています。";
    }
}

$dog = new Dog();
$dog->name = "ポチ";
$dog->speak(); // 出力: ポチが鳴いています。ポチがワンワンと鳴いています。

この例では、Dogクラスでspeak()メソッドをオーバーライドし、その中で親クラスのメソッドを呼び出すためにparent::speak()を使用しています。これにより、親クラスの処理と子クラスの処理を組み合わせて実行することができます。

-

5. 継承を使うメリットとデメリット

5. 継承を使うメリットとデメリット
5. 継承を使うメリットとデメリット

継承を使うことには多くのメリットがありますが、同時にデメリットも存在します。ここでは、継承を使用する際の利点と注意点を解説します。

メリット

  • コードの再利用性: 親クラスの機能を子クラスで再利用できるため、同じコードを何度も書く必要がなくなります。
  • 可読性の向上: 継承を使うことで、関連するクラス同士をまとめて管理できるため、コードが整理されて理解しやすくなります。
  • 保守性の向上: 親クラスの変更が子クラスにも自動的に反映されるため、バグ修正や機能追加が簡単になります。

デメリット

  • 過剰な依存関係: 継承関係が深くなりすぎると、クラス間の依存関係が複雑になり、変更が難しくなります。
  • 親クラスの変更が子クラスに影響を与える: 親クラスを変更した際、子クラスにも影響が出るため、予期しない動作を引き起こす可能性があります。
  • 適切な設計が求められる: 継承を使う際には、クラス設計が適切でないと、後々メンテナンスが難しくなることがあります。

これらのメリットとデメリットを考慮しながら、継承を使う場面を選びましょう。特に、大規模なシステムでは適切に設計しないと、後々コードが管理しづらくなることがあります。

6. 初心者におすすめのPHP継承学習方法

6. 初心者におすすめのPHP継承学習方法
6. 初心者におすすめのPHP継承学習方法

PHPの継承を学ぶためには、まずは基本的なクラスの概念をしっかり理解することが重要です。その上で、継承の使い方を実際にコードを書いて確認しながら学びましょう。以下に、初心者におすすめの学習方法を紹介します。

1. クラスの基本を学ぶ

PHPのクラスについて学び、その基本的な使い方を理解することから始めましょう。クラスを使ってオブジェクトを作成し、そのオブジェクトにプロパティやメソッドを追加する方法を学びます。

2. 継承の実践例を試す

次に、継承を使って親クラスと子クラスを作成し、それぞれの機能をどのように使い分けるかを実践してみましょう。例えば、動物のクラスを作成し、それを継承した犬や猫のクラスを作ってみると理解が深まります。


class Animal {
    public $name;
    public function speak() {
        echo $this->name . "が鳴いています。";
    }
}

class Dog extends Animal {
    public function speak() {
        echo $this->name . "がワンワンと鳴いています。";
    }
}

$dog = new Dog();
$dog->name = "ポチ";
$dog->speak(); // 出力: ポチがワンワンと鳴いています。

3. 親メソッドのオーバーライドを練習

親クラスのメソッドを子クラスでオーバーライドして、どのように動作が変わるかを学んでみましょう。親メソッドをそのまま使うのか、独自に変更するのかを選ぶ場面を実際に書いてみることが大切です。


class Animal {
    public $name;
    public function speak() {
        echo $this->name . "が鳴いています。";
    }
}

class Dog extends Animal {
    public function speak() {
        parent::speak(); // 親クラスのメソッドを呼び出す
        echo $this->name . "がワンワンと鳴いています。";
    }
}

$dog = new Dog();
$dog->name = "ポチ";
$dog->speak(); // 出力: ポチが鳴いています。ポチがワンワンと鳴いています。

4. 実際のプロジェクトで試す

学んだ継承を、実際にPHPで開発中のプロジェクトに組み込んでみましょう。簡単なシステムを作るときに親クラスと子クラスを使い、機能を拡張する方法を実践してみると理解が深まります。

5. 継承のシナリオを考える

実際のシナリオを考えて、継承を使ったクラス設計をしてみましょう。例えば、企業のシステムで社員クラスとその派生クラス(役職別)を作成するなど、実務に近いシナリオで学ぶと効果的です。

まとめ

まとめ
まとめ

PHPの継承は、クラス同士の関係を整理しながら機能を広げるための大切な仕組みです。はじめは少し難しそうに見えますが、実際に手を動かしてみると、コードをすっきり整理しながら再利用できる魅力に気づくはずです。親クラスに基本の処理を書き、子クラスで必要な部分だけを変更したり、独自の動作を追加することで、プログラムを柔軟に成長させることができます。特に、同じような処理が増えそうな場面では継承の仕組みがとても役立ちます。変更や修正もしやすくなるので、安心して機能を追加できるのも大きな利点です。現場でも長く使われている考え方ですから、しっかり身につけておくとPHPの開発が今までよりもずっと楽に感じられるでしょう。

継承の実用的なコード例をおさらい

ここでは、本編でも登場した流れを振り返りながら、親クラスと子クラスを使った拡張のイメージをもう一度確認します。


<?php
class Animal {
    public $name;
    public function speak() {
        echo $this->name . "が鳴いています。";
    }
}

class Dog extends Animal {
    public function speak() {
        parent::speak();
        echo $this->name . "がワンワンと鳴いています。";
    }
}

$dog = new Dog();
$dog->name = "ポチ";
$dog->speak();
?>

このように、親クラスが担っている処理を呼び出した上で、子クラスならではの動きを追加できるところが継承の面白いところです。実際の開発でも、基本動作にオプションの処理を加えたい時にとても役立ちます。

応用しやすい継承の使い方

継承を覚えると、現場で使える便利な書き方が増えていきます。例えば、ユーザー情報、商品情報、メッセージ機能など、多くのシステムで「共通部分」と「個別部分」が混在します。この共通部分を親クラスに集めておくと、管理がしやすくなり、ミスも減らせます。子クラスは個別に必要な情報だけ追加すればよいので、コードがどんどん整理されていく感覚を味わえるでしょう。

もう一つの実践サンプル

たとえば、社員を管理するシステムを考えると、親クラスに共通のプロフィールをまとめ、役職ごとに子クラスで固有の処理を書き足すことができます。


<?php
class Employee {
    public $name;
    public function info() {
        echo $this->name . "の基本プロフィールを表示します。";
    }
}

class Manager extends Employee {
    public function info() {
        parent::info();
        echo $this->name . "は管理職です。";
    }
}

$manager = new Manager();
$manager->name = "山田";
$manager->info();
?>

このように役割ごとに処理を分けることで、変更が必要になったときも安全に修正できます。共通部分が親クラスにあるため、子クラスを増やしても一貫した振る舞いが期待できます。

継承を扱うときのちょっとしたポイント

継承を活用するときは、無理にクラスを増やしすぎず、「共通する部分を親に、個別の違いを子に」という考え方を忘れないことが大切です。親クラスが増えすぎると、かえって分かりにくくなることがあります。最初は小さなプログラムから試して、徐々に応用していくと理解が深まり、自然と綺麗な設計ができるようになります。

先生と生徒の振り返り会話

生徒

「継承って思ったより便利なんですね。同じ機能を何回も書かなくていいのは助かります。」

先生

「そうだね。特に規模が大きくなるほど、共通部分をまとめられるメリットが大きくなるんだ。」

生徒

「親クラスを変更したら、子クラスにも反映されるのも嬉しいです。修正の手間が減りますね。」

先生

「そのとおり。ただし、継承を使いすぎると依存が強くなるから、どこまで共通化するかのバランスが大切だよ。」

生徒

「今回のサンプルみたいに、親の処理を呼び出してから独自の処理を追加できるのは面白かったです!」

先生

「実際の開発でもよく使うパターンだから、練習しながら自然に覚えていけば大丈夫。継承を使えると、PHPの設計がもっと楽しくなるはずだよ。」

この記事を読んだ人からの質問

この記事を読んだ人からの質問
この記事を読んだ人からの質問

プログラミング初心者からのよくある疑問/質問を解決します

PHPの継承(extends)は何のために使うのですか?

PHPの継承(extends)は、親クラスの機能を子クラスで再利用したり、機能を拡張するために使います。コードの重複を避け、メンテナンス性を高めることが目的です。
コメント
コメント投稿は、ログインしてください

まだ口コミはありません。

カテゴリの一覧へ
新着記事
New1
PHP
PHP のフォームデータの受け取り($_POST, $_GET)を完全解説!初心者向けガイド
New2
PHP
PHPのスコープとは?グローバル・ローカル・スーパーグローバルを完全解説!
New3
PHP
PHPの演算子をやさしく解説!算術・比較・論理・ビット演算子の使い方
New4
PHP
PHP の変数とは?基本的な使い方とデータ型を徹底解説!
-
人気記事
No.1
Java&Spring記事人気No1
Python
Pythonで辞書のキー・値・アイテムを取得する方法(keys(), values())
No.2
Java&Spring記事人気No2
Python
Pythonで辞書のネスト構造(入れ子辞書)を扱う方法 初心者向け完全ガイド
No.3
Java&Spring記事人気No3
Python
Pythonでエラースタックトレースを表示・取得する方法を徹底解説!初心者向け例外処理入門
No.4
Java&Spring記事人気No4
Python
PythonでMySQLに接続する方法を完全解説!初心者でもわかるpymysqlの基本
No.5
Java&Spring記事人気No5
Python
PythonでExcelファイル(.xlsx)を操作する方法を徹底解説!初心者でもできるopenpyxl・pandasの使い方
No.6
Java&Spring記事人気No6
PHP
PHPで画像ファイルをアップロードする方法を初心者向けに徹底解説!わかりやすい画像処理入門
No.7
Java&Spring記事人気No7
PHP
PHP の日付と時間の取得(date, time, strtotime)を完全解説!初心者でもわかる使い方
No.8
Java&Spring記事人気No8
PHP
PHP のデータ型を完全ガイド!初心者でもわかる int, string, float, bool など
-
-