| 265行目: | 265行目: | ||
<u>PHPにおいて、コンストラクタを複数定義することができない。</u><br> | <u>PHPにおいて、コンストラクタを複数定義することができない。</u><br> | ||
<u>したがって、コンストラクタはクラスごとに1つのみ定義することができる。</u><br> | <u>したがって、コンストラクタはクラスごとに1つのみ定義することができる。</u><br> | ||
<br><br> | |||
== 継承 == | |||
継承は、既存のクラス (親クラス) の機能を新しいクラス (子クラス) に引き継ぐ機能である。<br> | |||
<code>extends</code>キーワードを使用して継承を実装する。<br> | |||
<br> | |||
使用できるアクセス修飾子を以下に示す。<br> | |||
* public | |||
*: どこからでもアクセス可能 | |||
* protected | |||
*: そのクラスと継承したクラスからアクセス可能 | |||
* private | |||
*: そのクラス内からのみアクセス可能 | |||
<br> | |||
PHPにおいて、継承で可能なことを以下に示す。<br> | |||
* 親クラスのメソッドと属性を再利用 | |||
* メソッドのオーバーライド(上書き) | |||
* 新しいメソッドや属性の追加 | |||
* <code>parent::</code>を使用して親クラスのメソッドにアクセス | |||
<br> | |||
PHPにおける継承の特徴を以下に示す。<br> | |||
* PHPは単一継承のみをサポートする。<br>多重継承は不可。(1つのクラスは1つの親クラスしか持てない) | |||
* インターフェースを使用することで複数の型を実装できる。 | |||
* <code>final</code>キーワードを使用することで継承を禁止できる。 | |||
<br> | |||
finalキーワードを使用するシーンを以下に示す。<br> | |||
* セキュリティ上の理由でメソッドの動作を固定する場合 | |||
* クラスの機能を拡張させたくない場合 | |||
* コアとなる機能の一貫性を保持する場合 | |||
<br> | |||
<syntaxhighlight lang="php"> | |||
// class.phpファイル | |||
// 基底クラス (親クラス) | |||
class Animal | |||
{ | |||
protected $name; | |||
protected $age; | |||
public function __construct($name, $age) | |||
{ | |||
$this->name = $name; | |||
$this->age = $age; | |||
} | |||
public function makeSound() | |||
{ | |||
return "何かの音を出す"; | |||
} | |||
public function getInfo() | |||
{ | |||
return "名前: {$this->name}, 年齢: {$this->age}歳"; | |||
} | |||
} | |||
// 派生クラス (子クラス) | |||
// finalクラス : このクラスは継承不可 | |||
final class Dog extends Animal | |||
{ | |||
private $breed; | |||
public function __construct($name, $age, $breed) | |||
{ | |||
parent::__construct($name, $age); | |||
$this->breed = $breed; | |||
} | |||
// メソッドのオーバーライド | |||
public function makeSound() | |||
{ | |||
return "ワンワン!"; | |||
} | |||
// 新しいメソッドの追加 | |||
public function getBreed() | |||
{ | |||
return $this->breed; | |||
} | |||
// 親クラスのメソッドを拡張 | |||
public function getInfo() | |||
{ | |||
return parent::getInfo() . ", 犬種: {$this->breed}"; | |||
} | |||
} | |||
// 以下のコードはエラーになる | |||
// Fatal error: Class SportsCar may not inherit from final class Car | |||
//class SportsCar extends Car { | |||
// public function getType() | |||
// { | |||
// return "スポーツカー"; | |||
// } | |||
//} | |||
</syntaxhighlight> | |||
<br> | |||
<syntaxhighlight lang="php"> | |||
// 使用例 : index.phpファイル | |||
require_once(__DIR__ . '/class.php'); | |||
$dog = new Dog("ポチ", 3, "柴犬"); | |||
echo $dog->getInfo() . "\n"; // 名前: ポチ, 年齢: 3歳, 犬種: 柴犬 | |||
echo $dog->makeSound() . "\n"; // ワンワン! | |||
</syntaxhighlight> | |||
<br><br> | <br><br> | ||