オブジェクト指向~クラスの継承~
クラスの継承とは、既存のクラスを拡張するように自身のクラスを定義する方法です。
クラスAを基にクラスBを作りたいとき、クラスAを継承して追加変更したい機能だけをクラスBで定義します。
クラスの継承にはextendsキーワードを使います。
クラスAを基にクラスBを作りたいとき、クラスAを継承して追加変更したい機能だけをクラスBで定義します。
クラスの継承にはextendsキーワードを使います。
クラスの継承
class 子クラス extends 親クラス {
}
class 子クラス extends 親クラス {
}
親クラスproduct.php
<?php
class Product
{
private $name;
public function getName()
{
return $this->name;
}
public function setName($name)
{
$this->name = $name;
}
}
子クラスのインスタンスを使う
ボールペンの金額は500円です
<?php
require_once("product.php");
class DeskProduct extends Product
{
private $price;
public function getPrice()
{
return $this->price;
}
public function setPrice($price)
{
$this->price = $price;
}
}
$desk = new DeskProduct();
$desk->setName("ボールペン");
$desk->setPrice(500);
echo $desk->getName() . "の金額は" . $desk->getPrice() . "円です";
子クラスのコンストラクタから親クラスのコンストラクタを呼び出す
子クラスのコンストラクタから親のコンストラクタをparent::__construct($name)のように呼び出して値を渡す。これで親クラスの初期値が設定されて、子クラスも初期化できる。
親クラスのメソッドをオーバーライドして書き替える
親クラスのメソッドをそのまま使わず、子クラスで同じ名前のメソッドを定義することで、親クラスの同名のメソッドを上書きすることができる。この手法をオーバーライドと呼びます。
継承の禁止、オーバーライドの禁止
final class~のようにクラス定義にfinalキーワードを付けることで継承されないように制限できます。
同様にfinal function~のようにメソッド定義にfinalキーワードを付けると、子クラスからオーバーライドを禁止できます。
final class~のようにクラス定義にfinalキーワードを付けることで継承されないように制限できます。
同様にfinal function~のようにメソッド定義にfinalキーワードを付けると、子クラスからオーバーライドを禁止できます。