はじめに
前回の記事では、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メソッドについて紹介します。