NTR893
@NTR893 (おいなり)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

Laravel インスタンス化について

解決したいこと

Laravelのインスタンス化がイマイチわかりません。

ネットでインスタンス化について調べてみると、クラス(設計図)からインスタンス(実際に作ったもの)を作る行為。

と書いてあったのですが、クラスの中にある実際に作ったものをさらに作る行為?みたいな解釈になって、作ったものを作る??2度同じことを繰り返しているだけでは?となってしまいチンプンカンプンです。

その状態でしばらく放置してたのですが、勉強している教材の方で、インスタンス文が出て、案の定それの意味がイマイチよくわからないです。

    public function __construct($classBaseMessage)
    {
        $this->classBaseMessage = $classBaseMessage
        //
    }

こんな感じのインスタンス文で、$thisというのは、前にある$文、つまり$classBaseMessageの事を指していると思いました。

次に、->classBaseMessageなのですが、これは教材の方でプロパティ名を書いているといっていたので、プロパティとは何かを調べてみると、対象にくっついている、そいつがどんなやつかを表す情報と書いてあったので、>classBaseMessageが

どんな情報かを示す役割を担っていて、この中に入ってくるのが、$classBaseMessageといっていました。

なので、$classBaseMessageの内容を持っている$thisに、また$classBaseMessageの情報を流し込むという既に持っている同じ情報を注ぎ込むようなことをしているとしか思えないのですが、

この解釈であっているのかと、どうしてこんなことをするのかということを教えて頂きたく質問いたしました、

↓プロパティについて調べた記事

1

1Answer

Laravelのインスタンス化

Laravelの、というよりプログラミングのクラスとインスタンスについてですね。
__constructについて悩まれているようなので、その点について説明します。

__constructメソッドについて

__constructメソッドはコンストラクタと言い、クラスをインスタンス化する時に実行されるPHP言語の特殊なメソッドです。
下の例ではnew Person('田中')の時に実行されます。
(言語によってはクラス名と同じ名前のメソッドだったりします)

class Person {
    private $name;
    public function __construct($parsonName) {
        $this->name = $parsonName;
    }
}

// $tanakaはプロパティnameに'田中'を持つ、Parsonクラスのインスタンスオブジェクト
$tanaka = new Person('田中');

// $yamadaはプロパティnameに'山田'を持つ、Parsonクラスのインスタンスオブジェクト
$yamada = new Person('山田');

例では__construct($parsonName)としていますが、__construct($name)でも構いません。
今回は分かりやすい用にプロパティと違う名前を付けました。

コンストラクタへの値の受け渡しについて詳しく解説すると次のとおりです。

class Person {
    private $name; // 4. '田中'が入っている
    public function __construct($parsonName) { // 2. $parsonNameには受け渡された'田中'が入る
        $this->name = $parsonName; // 3. クラスのプロパティ$nameに'田中'を入れる
    }
}

new Person('田中'); // 1. コンストラクタの$parsonNameに'田中'を渡す

このようにコンストラクタは「インスタンスが生成されたときに持っているべき値」を設定することができます。
例では「Personクラスのインスタンスは必ず名前を持っている」となるよう設計しています。

余談

最近のPHPではコンストラクタからプロパティに値を渡す過程を短縮して書くことができます。
次のPersonクラスはどちらも同じものです。

class Person {
    private $name;
    public function __construct($name) {
        $this->name = $name;
    }
}

class Person {
    public function __construct(private $name) {
    }
}

参考

3Like

Comments

  1. @NTR893

    Questioner

    受け取った情報を。$thisを通してプロパティに入れていくという事ですね。
    とても分かりやすかったです。ありがとうございます!

Your answer might help someone💌