💭

Laravel __constractの継承云々

2022/02/13に公開

はじめに

コンストラクタで少し戸惑ったことがあったので、こちらにメモ書きとして記述します。

__constractとは

コンストラクタメソッド
オブジェクトが生成される際に、このメソッドが自動的に呼び出される。

親クラスの__constractの継承

子クラスでコンストラクタメソッドを定義していない場合

親クラスのコンストラクタを継承する。
※ただし、privateのアクセス修飾子がある場合は呼ばれない。

具体的に

class Book {
    function __construct() {
        echo "これは本です";
    }
}

class Manga extends Book {
}

上記、Mangaクラスにコンストラクタを記述しない場合は、親クラスであるBookクラスのコンストラクタが呼ばれる為、

new Manga()

を行うことで、

これは本です

と出力される。

子クラスでコンストラクタメソッドを定義している場合

親クラスのコンストラクタが自動的に呼ばれることはない。
もしも親クラスのコンストラクタを呼ぶためには、

parent::__construct();

上記を子クラスのコンストラクタにする記述する必要がある。

具体的に

class Book {
    function __construct() {
        echo "これは本です";
    }
}

class Manga extends Book {
    function __construct() {
        parent::__construct();
        echo "&漫画です";
    }
}

new Manga();

上記、Mangaクラスに、親クラスのコンストラクタを呼ぶ記述をすることで、Bookクラスのコンストラクタが呼ばれる為、

new Manga()

を行うことで、

これは本です&漫画です

と出力される。

parent::__construct();

がない場合は、

&漫画です

のみが出力される。

さいごに

継承関係や、アクセス修飾子を意識しながら、コードリーディングを進めていきます。

Discussion