
【6日でできるPHP入門】継承とは
オブジェクト指向プログラミングの大きな特徴のひとつが「継承」です。継承とは、あるクラス(親クラス・スーパークラス)の性質や機能を、別のクラス(子クラス・サブクラス)が引き継ぎつつ、独自の機能を追加できる仕組みです。
継承を活用することで、共通の処理をまとめて再利用したり、複雑な仕組みもシンプルに表現できるようになります。例えば「乗り物」クラスを親にして「自転車」「自動車」「バイク」などの子クラスを作るといった具合です。

1.継承の基本概念
1.1. 継承とは何か?親クラスと子クラスの関係
| 用語 | 意味・説明 |
|---|---|
| 親クラス | 基本となる機能やデータを定義するクラス(スーパークラス) |
| 子クラス | 親クラスの性質を引き継ぎ、さらに拡張するクラス |
継承を使うことで、子クラスは親クラスのメソッドやプロパティをそのまま使うことができ、必要に応じて自分だけの機能も追加できます。
1.2. 継承のイメージ図
例えば、「動物」クラスから「犬」や「猫」クラスが派生するイメージです。
動物クラス(親)
|
┌───────┼───┬──────────┐
犬クラス 猫クラス 馬クラス(子クラス)2.継承の実装と応用例
ここでは「Staff(スタッフ)」クラスを親として、「Manager(マネージャー)」クラスを子として継承する例を紹介します。
ファイル名: lesson59_1.php
<?php
// スタッフクラス(親クラス)
class Staff {
protected $name;
protected $department;
function setInfo($name, $department) {
$this->name = $name;
$this->department = $department;
}
function showProfile() {
echo "氏名:{$this->name}(部署:{$this->department})<br>";
}
}
// マネージャークラス(子クラス)
class Manager extends Staff {
private $role;
function setRole($role) {
$this->role = $role;
}
function showManagerInfo() {
echo "役職:{$this->role}<br>";
}
}
// インスタンス生成と利用
$mgr = new Manager();
$mgr->setInfo('山田 太郎', '開発部'); // 親クラスのメソッド
$mgr->setRole('部長'); // 子クラス独自のメソッド
$mgr->showProfile(); // 親クラスのメソッド
$mgr->showManagerInfo(); // 子クラスのメソッド
?>実行結果例

2.1. サンプルプログラムの詳細解説
- Staffクラス(親)
スタッフの名前と部署を管理する基本的なクラスです。setInfoで値をセットし、showProfileで表示します。 - Managerクラス(子)
Staffクラスを継承(extends)し、役職(role)を追加しています。
これにより、名前や部署の情報を親クラスの機能で扱いつつ、マネージャー独自の役職も管理できます。
クラス構成まとめ
| クラス | メンバ名 | 概要・役割 |
|---|---|---|
| Staff | $name | スタッフの名前 |
| $department | 所属部署 | |
| setInfo() | 名前と部署の設定 | |
| showProfile() | スタッフ情報の表示 | |
| Manager | $role | 役職(部長など) |
| setRole() | 役職の設定 | |
| showManagerInfo() | 役職情報の表示 |
2.2. protected修飾子の活用
protectedを使うことで、「子クラスからはアクセスできるが、クラス外部からは直接アクセスできない」プロパティを定義できます。
例:protected $name;はManagerクラスの中でも利用できますが、$mgr->nameのように外部からはアクセスできません。
3.継承の応用例・ポイント
3.1. 子クラスで親クラスのメソッドを上書き(オーバーライド)
子クラスは、親クラスのメソッドを同名で再定義して独自の動作を持たせることも可能です(=オーバーライド)。
3.2. 継承を使うメリットと注意点
| メリット | 注意点 |
|---|---|
| コードの再利用性が向上 | 複雑な継承関係は管理が難しくなる。 |
| 拡張・変更が容易 | 子クラスでの上書きに注意が必要 |
| 共通の処理をまとめやすい。 | 過剰な継承は避けるのが望ましい。 |
まとめ
継承は、親クラスの機能をそのまま子クラスに引き継いだり、拡張するための強力な仕組みです。
親クラス・子クラス・protected修飾子などの基本を理解しておくと、より効率的で見通しの良いプログラムが書けるようになります。
また、必要に応じてオーバーライドや子クラス独自の追加も活用しましょう。
