Progate PHP学習レッスンⅡ②
おはようございます。
プログラミングの勉強をしていて、分からないことによくぶつかります。
・・・・イミフ。
みたいな感じです。
ただ、そんな時は、そもそも高位な方々が使用される言葉なので、自分なんぞが理解できるなんておこがましい。と思ってみたり、会社でよくみかける、謎ルールね!(意味はわからないけど、とりあえず、ルールだから従っているもの)みたいに思ってみたりしています。
あるいは、自分の勝手な解釈で理解した気になってみて、あとになってから全然違うことに気付かされる。ということもあります。
人の場合、違う解釈で進めていくと取り返しのならないことになることもありますが、プログラミングの場合は、ダメ!絶対!
的なもの(エラー)を直ぐに返してくれるので、致命傷にならずにお互いの関係を修復ができます。
恋人や夫婦の場合には、コードを書き直ししてもある程度のところまでいってしまうと受け入れて貰えなくなりますので、その点プログラムは優しいです。
やっぱり高位な方々です。
懐広いです。
今日も勉強していきます。
PHP学習レッスンⅡ
6. コンストラクタ
いきなりイミフな単語
どうやらmethodらしい。しかも特別な。どんな意味で特別?
newでインスタンス作った時に、自動的に生成されるっぽい。
それは特別なのか・・?
コバンザメ的な?
所在する場所としては、classの中に存在する (書く)
public functionのあとにアンダーバーふたつかいて関数書く__construct(){}みたいに
確かにfunctionのあとに__二つ書くとか特別だ。
コード書いてないからわからないけど、__でコンストラクタ書くと、class終わった後に$curry = new Menu();が生成されるっぽい。
自動的に生成されたインスタンスをコンストラクタと呼んでる・・?
便利なのは確か。
演習 functionと__construct(){}の間にはスペース書くっぽい。
演習 : 一つのメニューが作られましたが2回表示されるのは、メニュー2つ作っているからか・・・。
とりあえず、無事クリア
7. コンストラクタとプロパティ
なんか、特別なコンストラクタと引数の関係について書かれてそうでビビッとくる。
そういえば、プロパティってただの値というか箱の名前みたいなやつだったな。
コンストラクタは特別なインスタンスだから、それとの関係性みたいな話だろうか・・。
__construct($name) :関数の引数と新しく生成されたコンストラクタの中の引数('CURRY')の関係を説明してる。
なるほど、コンストラクタの中の引数がconstruct関数の引数に入るんだ。
で?どうなるの?
疑似アロー (ofみたいな->)出てきた。
ああー。classの中で作った$name概念をconstructにもセットしている。$this->name = $name;
これで、コンストラクタの$nameはclassの$nameと一緒になる。
そして$curryという箱にMenu名('CURRY')をつけてCURRYとechoさせている。
そういえば、newってなんだっけ・・。
newはクラスつくるやつだ。Menuクラスを使って、インスタンス(この場合、コンストラクタ?)にname持たせておく。
なんか勘違いしている気がする。
construct使うことで、インスタンス生成時にプロパティをセットできることがコンストラクタの美味しさ?
やっていることとしては、繰り返しになるけど、classの中にpublic function construct__でコンストラクタ作っている。
メリットがいまいち分からない・・。publicだけじゃダメなんだっけ?
よくわかんないから、昨日のスライド見直す。
昨日やった時には、class内で、new使ってインスタンスを生成することと、public使って、publicで$nameプロパティを定義したこと。
classの中でpublic使って、$nameプロパティ定義した後に、classの外で、new使って、インスタンス(例えば$curry)を生成した後に、プロパティに値を設定している。
今日やっているコンストラクタ使うとclassの中にコンストラクタと呼ばれる関数らしきもの__construct($name)を作って、その後の処理で、インスタンスのnameプロパティをセットする処理をしている。($this->name=$name;)
繰り返しになるが、コンストラクタ使わない場合にはclassの外でインスタンスの生成してから、プロパティの値を入れているのに対して、コンストラクタ使うと、classの中で生成されたインスタンス(コンストラクタ)にプロパティセットできるので、コード書くのが楽になる。
具体的には・・・、これまで 1行目 : $curry = new Menu() 2行目 $curry -> name = 'CURRY' (プロパティに値セット)の2行必要だったのが・・・、これから(コンストラクタと出会った後)は、1行目 : $curry = new Menu('CURRY')で書ける。
おぉ~!!
コンストラクタに出会うことによって、インスタンス生成した時の行数を減らせる!!
減らせてるのは、クラスの中でプロパティセットする為の$this->name = $name;入れてるから。
プロパティセットできるような形でインスタンスリリースするよ!というのがコンストラクタなのか・・
インスタンス増えれば増えるほど、効果デカくなるじゃん・・。
プログラミングが少ないコードで多くを表現できる(効率化できる)ことが正義とされるなら、コンストラクタは正義だ。やはり特別な存在だ。
理解できていなかったのは、昨日のインスタンス作ってから、プロパティ入れるまでのコードの流れが頭に入っていなかっから。
キャプチャして並べるとなんとなく理解できた気がするので、今後わからなくなったら、スライドキャプチャとコード比較してみよー(これまでとこれから比較)
echoで$name呼ぶときは、echo $curry->name;で同じだな
演習 : construct()の中に$name入れるの忘れない。
演習 : なんか動かない。何が違う・・・?
constructの中の$this->name=$name 太字忘れてた。
nameの前に$つけちゃだめ(->の場合)だったり、->ない場合はつけないといけなかったりややこしい。
->は矢(アローっぽい)から矢がname刺さっているときは緊急事態だから$(ドル)いらなくて、それ以外は$(ドル)が欲しいみたいな覚え方をしよう。(お金より命的な)
演習クリア!
学習範囲 : PHP学習レッスンⅡ 6~7
学習時間 : 60分(9:20~10:20)
備考 :コンストラクタにプログラミングの神髄(コード削減)を見ました。
この記事が気に入ったらサポートをしてみませんか?