PHP クラスの継承の仕組みとサンプル

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

関連の記事

PHPクラスの仕組みと使い方のサンプル
PHP コンストラクタのサンプル

△上に戻る