PHP7.4.1におけるコンストラクターについて。
declare(strict_types=1);
class Class1 { //Class1という名前のクラスを定義
public string $ca; //str型のプロパティcaの定義
public int $cb; //int型のプロパティcbの定義
public function __construct(string $ca, int $cb = 0) { //publicと__constructは固定
$this->ca = $ca; //インスタンス化したときのパラメータ1を$caに代入
$this->cb = $cb; //インスタンス化したときのパラメータ2を$cbに代入
}
public function getCb1() { //パラメータなし
return number_format($this->cb); //cbの値をnumber_formatで処理して返す
}
public function getCb2(string $cba = '円') { //パラメータとデフォルト引数あり
return number_format($this->cb) . $cba; //cbの値を関数で処理した値に$cbaを連結して返す
}
}
$ca = new Class1('グラタン', 1100); //class1クラスのインスタンスを作成
//$ca->ca = 'グラタン:'; //コンストラクターのパラメータがあるので不要
//$ca->cb = 1100; //コンストラクターのパラメータがあるので不要
echo $ca->ca, $ca->cb, "円\n"; //グラタン:1100円
echo $ca->ca, $ca->getCb1(), "円\n"; //グラタン:1,100円
$cb = new Class1('ピザ', 1400); //class1クラスのインスタンスを作成
//$cb->ca = 'ピザ:'; //コンストラクターのパラメータがあるので不要
//$cb->cb = 1400; //コンストラクターのパラメータがあるので不要
echo $cb->ca, $cb->cb, "円\n"; //ピザ:1200円
echo $cb->ca, $cb->getCb2(), "\n"; //ピザ:1,200円
echo $cb->ca, $cb->getCb2('ドル'); //ピザ:1,200ドル
コンストラクターとは、クラス定義をしたときに実行する処理のことです。
上記スクリプトでは、Class1クラスを宣言するにあたって、$caと$cbという2つのプロパティを作っています。
コードを見て分かるとおり、クラス定義の時点では、この2つのプロパティは初期化されていません。
〇変数の初期化
変数の初期化とは、宣言した変数に最初の値を代入することです。
個の初期化処理を済ませていない変数をパラメータとして参照した瞬間に、コンピュータはErrorを出してスクリプトを強制的に終了させます。
閑話休題。
コンストラクターを使わない場合は、上記スクリプトのコメントアウトしているコードのような感じで、これらのプロパティにそれぞれ値を代入しなければいけません。
しかしコンストラクターでこの2つのプロパティの値をコンストラクターのパラメータに代入してやることで、それぞれのプロパティをいちいち個別に初期化してやる必要はなくなります。
コンストラクターの定形はだいたい以下のとおりです。
public function __construct(string $aa, int $bb = 012) {
$this->パブリック名 = $aa;
$this->パブリック名 = $bb;
}
コンストラクターはパブリックの初期化のためだけに存在するわけではないと思いますが、まあだいたいこんな感じだと認識してください。
また、コンストラクターの public function __construct の記述は変更することはできません。
コンストラクターのアクセス修飾子を変えたり名前を__udonとかに変えたりすると、コンストラクターは機能しなくなります。
コンストラクターのパラメータに渡す引数はインスタンスを作るときのパレンティス(丸括弧)内に記述します。
なお当然ですが、コンストラクターのパラメータにデフォルト引数を指定しつつインスタンス作成時にパラメータの値を指定しなかった場合には、デフォルト引数の値がコンストラクターに引数として渡されます。
以上です。