PHP - OOP - 8. 継承 - 1/3
オブジェクト指向プログラミングでは、既存のクラスをベースにして新たなクラスを定義できます。このような仕組みを継承と呼びます。
クラスの継承
継承とは既存のクラスのプロパティやメソッドを引き継いで、新たなクラスを定義する仕組みです。継承を使うことでプログラムの再利用性を高めることができます。
PHPにおいてクラス間の継承関係を定義するには extends キーワードを使います。ここでは MyClass を継承して MySubClass を作成する例を示します。
require_once("MyClass.php");
class MySubClass extends MyClass
{
public function myMethod2()
{
echo "Hello World!" . PHP_EOL;
}
}
また継承元のクラスをスーパークラスや親クラス、継承先(新たに作成するクラス)をサブクラスや子クラスなどと呼ぶこともあります。この例であれば MyClass がスーパークラスであり、 MySubClass がサブクラスです。サブクラスはスーパークラスのプロパティやメソッドを引き継ぎます。そのため次のように MySubClass のインスタンスを操作できます。
require_once("MySubClass.php");
$mySubClass = new MySubClass("Hello");
$mySubClass->myMethod("Andy"); #=> Hello Andy
$mySubClass->myMethod2(); #=> Hello World!
ここでは MySubClass のインスタンス対して、スーパークラスの MyClass に定義している myMethod メソッドの呼び出しが可能である点を確認してください。このように継承によってスーパークラスのプロパティやメソッドを再利用できます。
PHPプログラムの開発(継承)

ここでは計算機クラス( SimpleCalc.php )を継承して多機能な計算機クラス( GreatCalc.php )を作成します。
<?php
require_once("SimpleCalc.php");
class GreatCalc extends SimpleCalc
{
public function pow($x = 2)
{
$this->number = $this->number ** $x;
}
}
GreatCalc クラスは extends キーワードでスーパークラスに SimpleCalc クラスを指定しています。これによって SimpleCalc クラスのプロパティやメソッドを GreatCalc クラスでも利用できます。
GreatCalc クラスには新たに、べき乗を求める pow メソッドを定義しています。 pow メソッドの内部では、スーパークラスの $number プロパティにアクセスしています。このようなケースではサブクラスからも $number プロパティのアクセスできるようにアクセス権を protected や public にしておく必要があります。次のように計算機クラス( SimpleCalc.php )を修正します。
<?php
class SimpleCalc
{
protected $number;
// ...省略
}
ここではサブクラスである GreatCalc クラスから $number プロパティにアクセスできるように、アクセス権を protected に修正しています。
続いて実行プログラム( calc_runner.php )を次のように修正します。
<?php
require_once("GreatCalc.php");
$calc = new GreatCalc();
$calc->add(2);
$calc->pow(3);
$calc->show();
このプログラムでは $calc 変数に GreatCalc インスタンスの参照を代入しています。 GreatCalc クラスは SimpleCalc クラスを継承しているので $calc 変数に対して SimpleCalc クラスの add メソッドや show メソッドも呼び出すことができます。
それではコマンドラインからプログラムを実行してみましょう。
$ php calc_runner.php
8
実行結果から 2 の 3 乗である 8 が出力されているのがわかります。
まとめ
- 継承とは、既存のクラスを新たなクラスで拡張する仕組み
classキーワードでクラスを定義する際にextendsキーワードで継承元のクラスを指定する- 継承元のクラスのプロパティ、メソッドを継承先のクラスで再利用できる