💭
Laravel __constractの継承云々
はじめに
コンストラクタで少し戸惑ったことがあったので、こちらにメモ書きとして記述します。
__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