クラスの継承
既に定義済みのクラスのプロパティやメソッドをまるごと利用して、新たにメソッドやプロパティ追加した、別のクラス名を定義する。
class クラス名 extends 親クラス名{}
//既存のProductクラスを親として、新たにPhoneクラスを定義
class Phone extends Product{
}
ファイル分割
require_once('ファイル名');
//Prodcutクラスが書かれたファイルproduct.phpを読み込む
require_once('product.php')
<分割の用途>
・クラス毎に分割
・インスタンス生成(データ用)
・表示用
ファイル分割の例
▼下記6ファイルの場合
親クラスを定義したファイル
①product.php
②review.php
継承(product.phpの内容)
③phone.php
④watch.php
データファイル(インスタンスの生成)
⑤data.php
表示
⑥index.php
▼ファイル呼び出しの記述
①、②不要
require_once('product.php');
require_once('phone.php');
require_once('watch.php');
require_once('data.php');
require_once('review.php');
⑥index.phpでは、①~⑤のすべてのファイルを呼び出していることになる。
オーバーライドとは
継承した子クラスで、親クラスのメソッドを上書きすること。
事例の前に、オーバーライドでよく使われる構文を一つ。parent::メソッド名();
└ 親クラスのメソッドの呼び出し
▼オーバーライドの例(コンストラクタ)
“`php:①親(Product)クラスのコンストラクタ product.php
class Product{
// プロパティ
protected $name;
protected $price;
protected $image;
protected $orderCount=0;
// コンストラクタ
public function __construct($name, $price, $img){
$this->name = $name;
$this->price = $price;
$this->image = $img;
}
}
<br>
上記のProductクラスを継承したPhoneクラスを生成し、コンストラクタをオーバーライドする。
php:②オーバーライド(コンストラクタの上書き)
<?php
//Productクラスの書かれたファイルを読み込み
require_once(‘product.php’);
//productクラスを継承し、Phoneクラスを作成
class Phone extends Product{
//sizeプロパティを新たに追加
private $size;
//コンストラクタをオーバーライド
public function __construct($name, $price, $img, $size){
parent::__construct($name, $price, $img);
//新たに定義したプロパティの値をセット
$this->size =$size;
}
<br>
`parent::__construct($name, $price, $img);`は以下と同じ内容(書き換え可能)
$this->name = $name;
$this->price = $price;
$this->image = $img;
“`