はじめに
前回の記事では、PHPのクラスについて紹介しました。
前回の記事
本記事では、PHPの継承とオーバーライドについて紹介します。
継承(extends)
継承とは、クラスが持っているメソッド(関数)やプロパティ(変数)を別のクラスに引き継がせることです。
継承元のクラスを親クラス、継承先のクラスを子クラスといいます。
スポンサーリンク
子クラスを作成するには「extends」(読み:エクステンズ)を使用します。次のように「extends」の前に子クラス名、後に親クラス名を指定します。
継承の使用例
それでは、実際にPHPのプログラムで継承の使い方を紹介します。
次の例では「ChildClass」が「BaseClass」を継承しています。子クラスである「ChildClass」は、「BaseClass」を継承しているので、「BaseClass」の「printBase」メソッドを引き継いでいます。
[継承の例]
<?php // 親クラス class BaseClass { public function printBase() { print("親クラスです<br />"); } } // 子クラス class ChildClass extends BaseClass { public function printChild() { print("子クラスです"); } } $child = new ChildClass(); $child->printBase(); $child->printChild(); ?>
[実行結果]
親クラスです 子クラスです
継承を使うメリット
例えば、次のような2つのクラス「新車クラス」と「中古クラス」があるとします。
[継承を利用しない場合の例]
<?php // 新車クラス class NewCar { const MANUFACTURER = "○○自動車"; public function printCar($price) { print("製造元は".self::MANUFACTURER."<br />"); print("販売価格は$price 円<br />"); } public function printNewCar($price) { print("新車です<br />"); $this->printCar($price); } } // 中古クラス class OldCar { const MANUFACTURER = "○○自動車"; public function printCar($price) { print("製造元は".self::MANUFACTURER."<br />"); print("販売価格は$price 円<br />"); } public function printOldCar($price) { print("中古車です<br />"); $this->printCar($price); } } ?>
この2つのクラスは、どちらも車に関連するクラスであり、以下の内容がまったく同じです。
同じ内容のソースコードを色々な個所に書くと、修正する際に複数の個所を直す必要があり、保守性が悪くなります。
そのため、共通的な部品は共通機能として管理するか「継承」して管理します。(例えば、色々な個所で使う共通的な部品であれば共通機能、車クラスの共通部品であれば車の親クラスで管理など)

スポンサーリンク
以下は継承を使用した場合の例です。
[継承を利用した場合の例]
<?php // 車の基本クラス class BaseCar { const MANUFACTURER = "○○自動車"; public function printCar($price) { print("製造元は".self::MANUFACTURER."<br />"); print("販売価格は$price 円<br />"); } } // 新車クラス class NewCar extends BaseCar { public function printNewCar($price) { print("新車です<br />"); $this->printCar($price); } } // 中古クラス class OldCar extends BaseCar { public function printOldCar($price) { print("中古車です<br />"); $this->printCar($price); } } ?>
上記例では、「新車クラス」と「中古クラス」は「車の基本クラス」を継承しています。
継承を使うことで、車の共通的な機能は親クラスで管理し、子クラスでは、子クラス独自の機能を実装するだけです。
継承を利用することで、何度も同じソースコードを書かずに済み、読みやすいソースコードを書くことができます。

オーバーライド
オーバーライドとは、継承元である親クラスで定義されているメソッドを、子クラスで書き換えることです。
親クラスにあるメソッドと、同じ名前、同じ引数のメソッドを子クラスに記述することでオーバーライドすることができます。
オーバーライドの使用例
それでは、実際にPHPのプログラムでオーバーライドの使い方を紹介します。
次の例では、親クラスのメソッド「printItem」を子クラスでオーバーライドしています。
[オーバーライドの例]
<?php // 親クラス class BaseClass { public function printItem() { print("親クラスです"); } } // 子クラス class ChildClass extends BaseClass { public function printItem() { print("子クラスです"); } } $child = new ChildClass(); $child->printItem(); ?>
[実行結果]
子クラスです
終わりに
本記事では、PHPの継承とオーバーライドについて紹介しました。
次回の記事では、HPのstaticプロパティとstaticメソッドについて紹介します。