Progate PHP学習レッスンⅡ⑤
おはようございます。
端午の節句も過ぎて、また季節が一つ進みましたね。
自分の方はPHPから中々先に進めないですが、今日もProgateやっていきます!
PHP 学習レッスンⅡ
12.税込み価格を表示しよう
税率計算するコードを書くのかな
Menuクラスの中にprice プロパティを使って、税込み価格の定義を作るっぽい
早速演習
まず、menu classsを探す。
メソッドを定義せよとのこと。
定義方法分からず、スライドを参照
methodの定義はクラスの中にpublic function 関数(){処理文;}で作る。
関数作りましょうとのこと。method = 関数
ヒントにfloor関数 (小数点以下切り捨て)を使ったら良いと書いてある。
税金って切り捨てなんだ
戻り値計算するっぽいけどpublic function使ったときの戻り値の書き方忘れてしまった。
過去のnote参照。
メモの羅列で見つからず・・。
参考になりそうなサイトを見つける
参考内容に従って書いてい見る。
index.phpのHTML内に先ほどの戻り値を示す
表示はされるが、税抜き価格。
どうやら計算がうまくできてい無さそう。
よくわからないから解答を見る。
そのまま関数名()付で書けば良いんですね。なるほど・・。
上手く結果反映されない模様
もう一度解答見る
methodの定義のやり方が違っている。
メソッド内に変数は不要。
ただし、return表記する時に$this->priceと書く。理由は不明
いったんそのままにしておいて、次にいこう・・。
13.カプセル化を学ぼう
新単語。カプセル化
使い手に必要の無い物を見せないようにする機能
このブログとは反対の機能だな・・。(極力思考をメモしている)
使い手の安全性を確保する為に使うらしい。
具体的にはクラスのプロパティとメソッドへのアクセスを制限する行為
publicとprivateで使い分ける。publicって公共(全員アクセスできる)からpublicなんだ。
ゲッター
プロパティのアクセス権をPrivateにするとクラス外からプロパティ値を取り出せない。その為、クラス内にゲッターを作って、値だけ返すような定義を加える。
何の為に値を返す必要があるのかは分からないけど、とりあえず進む。
演習 : とりあえず埋めてみたけど、エラー発生
とりあえず、メソッド名違っていたから直したが・・、スライドを見て実行するも動かず。
もういちどスライド見る。
よくわからないので、答えを見る。
index phpの名前を変えていないことが原因っぽい。
そうか$nameや$imageはpublic methodのプロパティ値だからか・・・。
修正してみたが動かず。
再び解答を見る。
index.phpは問題無さそう。
menu.phpを見る
アローの>抜けてる!
クリア。
気づけないな~。
14.注文個数を管理しよう
menu.phpを見る
$orderCountプロパティ追加して、注文個数管理できるようにする。
セッターと呼ばれる新キャラ登場
ゲッターと何が違う?
private化すると外から値変更できないから、classの中で値変更できるようにするmethodの定義をセッターというらしい。ゲッターは固定値?
最初にprivateで宣言する時に初期値0もセットしておく
演習 : とりあえず、思いついたままに書いてみる
data.phpの$juiceに対してsetOrderCountメソッドを使わないといけない。
関数呼び出し必要。require_onceを使う感じか。
書き方忘れたので、スライド参照
<?php内?>で読みだすケースを適用
と思ったら、既に一番上に書いてあった・・。乙
遠慮なく使う。
回すとエラー発生
答えとの比較
とりあえず、注文数のプロパティ値違ったので修正。でも治らず。
再び確認
indexはOK
set order Count methodが色々違う
returnで書くのかとおもったら、そうじゃなくて、プロパティ値セットする時の文章が正解のよう。例を出すと、$this->name = $name;の時のおような書き方。プロパティ値セットの考え方とセッターの考え方が分かっていないよう。
まだ動かない
->の後に$入れてて間違えてしまう。
× return $this->$orderCount
〇 return $this->orderCount
まだ駄目か・・・。
次はメソッド定義の方には$が抜けていた。
×this->orderCount = orderCount;
〇this->orderCount = $orderCount;
ようやくクリア
コード見直してみると、getOrderしてからsetOrderのメソッドを使う意味が良く分かっていない。
コード見ていると、setOrderはdataphpで使っている。裏で使っている数字
getOrderはindex.phpで表示している
両方ともプライベートであることには違いない。
getOrderは数値を表示するだめだけに作っておいて、setOrderは引数も入れて自由に変えられるようにしているように見える。
学習時間 : 1時間20分 (9:50 ~11:10)
学習範囲 : PHP学習レッスンⅡ 12~14
備考 : 激ムズ。3周ぐらいしないと、しっくりこないのではという気がしてきた。今はprogate先生が自分の答えと正解を並べて表示してくれるので、ここが違うんだー、こうすれば正しくなる (ただし理由はよくわかっていない)ということが分かるが、自分でWebブログ立ち上げて書くときには、こんなに丁寧に教えてくれないから、永久に抜け出せなくなる気がする。大きな壁がありそう。(既に練習段階でぶつかっているが)
この記事が気に入ったらサポートをしてみませんか?