php、laravelの今週の学び。わからないことだらけですよ。
自作関数を利用する
amazonのapiをプログラムに組み込もうと思った。プログラムは別に作って、動くが合体?のさせ方がわからない。どうしたらいいんだろう。
フレームワークのおかげ(弊害)で今までふつうに知らずに来たが、全然わからない。
require?なんか違う。そのファイルの関数を利用できるようにしたい。ネットでもいまいちわからない。買って書籍をちゃんと見てみたところ、これがオブジェクト指向を使うところ!ということがわかった。
ふつうに今までDBで使ってた表現だった。書いてたのに意味をわかってなかったのだ。
$search_amazon = new \App\lib\Amazonfunctions;
・Amazonfunctionsというクラス(基本1ファイル1クラスなのでファイル名も同じ)をインスタンス化したものを$search_amazonに代入します、という意味。
$goodsinfo_amazon = $search_amazon -> searchIsbn($val_isbn);
・今まで謎だった矢印の意味が明らかに!インスタンス$search_amazon内にあるメソッド(=関数)のsearchIsbn(引数)を使います!という意味。「クラス->メソッド」。これもビューでリレーションを使うときに使っている表現。なんかすっきり。
$market_price = $goodsinfo_amazon['usedprice'];
・searchIsbn()メソッドは連想配列をreturnする。値を取り出すときには$変数['キー']を使って取り出す!
同じ外部キーを持つもので合計
顧客1人分の料金の合計を知りたいと思った。何も考えずにビューでsum()を使うと、全部の合計が出てしまった。一人分を調べるには、外部キーを指定してsumする必要がある。クエリビルダを使うことにした。
$sum_get_price = DB::table('assessmentdetails')
->where('assessment_id', $request->id)
->join('goods', 'goods.id', '=', 'assessmentdetails.goods_id')
->sum('get_price');
$thisの意味がわかる
$thisが今までイミフだったのだが、使わないといけない場面でやっと理解できた。
文章の上の自作関数のときである。
上のクラスは2つのメソッドで構成されている。1つはメインで、もうひとつはメインから何回か呼び出されるサブの小さな関数だ。
最初実行したとき、サブの関数が見つからないので実行できません的なエラーが出た。えーなんで、newしているのに、と思って悩む。わざわざディレクトリとか指定しないといけないのか?
調べるとすぐ$thisに行き着いた。$thisは同じクラスのメソッドである、という意味。
$this->subで、同じクラスにあるメソッドのsubです!ということになる。
つまり…関数の呼び出しにもいろいろあって、
・完全に別の場所から関数を使うときはnew クラス; クラス->メソッド()
・同じクラスの関数を呼ぶ時は$this->メソッド
を使うということ。同じメソッドでも、完成しているか、部品化されているかで違いがあって、それが呼び出し方にあらわれている(と思う)。
連想配列をreturnする
連想配列をreturnすると、見た目はふつうの変数に見える。できていない?と思うが素直に$変数['キー']でアクセスできる。ふしぎな感じがする。
['キー']をつけずそのまま展開すると中身がすべて出てきて、最初できないかと思った。連想配列って寄生獣でいう後藤さん的なやつなんだろうな、というイメージ。
まとめ
知らなくてもどうにかなってしまう、それがフレームワーク。
でもあとで本でネタバレというかちゃんと意味知るともっと面白いなあと思った。そういうことだったのか!!↓今週買って参考にした書籍。
全体的にわかりやすい!「クラスとオブジェクト」の章にクリティカルにわかりやすい部分があった。オライリーにありがちな「文字はわかるけど頭に入ってこない翻訳文章」ではなく完全な日本語だからかもしれない。
フレームワークを実際に作成する章もあって、laravelがどんなふうに動いてるかなーというのもイメージできそう。何日かかかりそうだが。さらにWEBセキュリティの部分まで充実している。
…フレームワーク!WEBセキュリティ!と「パーフェクト」だから上級者向けかと思いきやちゃんと演算記号とかの基本部分から始まっている。全然初心者でもいけるすごくいい本だと思う。