PHPのクラスの継承の仕組みとサンプルです。
確認環境 ・PHP 7 |
目次
仕組み | クラスの継承とは |
継承の書き方 | |
親クラスのコンストラクタを実行する(parent::) | |
親クラスのメソッドを実行する(parent::) | |
クラスの継承を禁止する(final) |
クラスの継承とは
クラスがクラスを継承すると、継承先のクラスは継承元のクラスの機能を引き継ぎます。
継承先のクラスは、差分の機能を追加するだけでよくなります。
継承元のクラスのことを「基底クラス 」or 「親クラス 」or 「スーパークラス」といいます。
継承先のクラスのことを「派生クラス」 or「 子クラス」 or「 サブクラス」といいます。
継承の書き方
class 継承先のクラス名 extends 継承元のクラス名{ } |
- 継承先のクラスは、「extends」の後ろに継承元のクラス名を記述します。
- 継承元のクラス(親クラス)は、1つのみ指定できます。
- 継承したクラスをさらに継承することはできます。
クラスの継承のサンプルです。
<?php
class Color1
{
public function getName1()
{
return "赤";
}
}
class Color2 extends Color1
{
public function getName2()
{
return "青";
}
}
$cr2 = new Color2();
print $cr2->getName1(); //赤
print $cr2->getName2(); //青
2~8行目は親クラスです。
9~15行目は子クラスです。extendsで2行目のColor1クラスを継承しています。
17行目のgetName1メソッドは子クラスに存在しませんが実行できます。
→子クラスは、親クラスのメソッドを再実装しないで済んでいます。継承の利点です。
親クラスのコンストラクタを実行する(parent::)
親クラスのコンストラクタを実行するサンプルです。parent::を使用します。
<?php
class Color1
{
public $colorName;
public function __construct($name)
{
$this->colorName = $name;
}
}
class Color2 extends Color1
{
public function __construct($name)
{
parent::__construct($name);
}
}
$c1 = new Color2("赤");
print $c1->colorName; //赤
12行目は、コンストラクタです。
14行目はparent::で親クラスのコンストラクタを実行します。
親クラスのメソッドを実行する(parent::)
親クラスのメソッドを実行するサンプルです。parent::を使用します。
<?php
class Color1
{
public function getName1()
{
return "赤";
}
}
class Color2 extends Color1
{
public function getName2()
{
return (parent::getName1());
}
}
$cr2 = new Color2();
print $cr2->getName2(); //赤
9行目のクラスは、2行目のクラスを継承しています。
13行目はparent::で親クラスのメソッドを実行します。
クラスの継承を禁止する(final)
final class クラス名 |
finalでクラスの継承を禁止するサンプルです。
<?php
final class Color1
{
public function getName1()
{
return "赤";
}
}
// class Color2 extends Color1
// {
// public function getName2(){
// return(parent::getName1());
// }
// }
$cr2 = new Color2();
print $cr2->getName2(); //
2行目は、finalがついています。
9行目のクラスは、2行目のクラスを継承できません。エラーになります。
以下は、PHPマニュアルの継承のリンクです。
http://php.net/manual/ja/language.oop5.inheritance.php
関連の記事