ギター好きブログ

アプリ開発(ハンズオン) 2

f:id:dicoffe:20171004102822p:plain

今回は2行目の「$stmt」の中身について解読していきたいと思います。

まず「$this」の右にある「->」(マイナス記号と不等号記号)とはなに?と思ったのですが、これは「アロー演算子」といって、オブジェクト指向で扱う「クラス」の「メソッド」や「フィールド」にアクセスするための演算子です。
授業でやったやつですね。大雑把にいうと「クラス」が教室の名前、「メソッド」が授業するとか休憩するとかの操作を表す、「フィールド」が1組、2組とか教室の中での細かい区分けになるんでしょうか。

アロー演算子は、例えば、クラスを$class(=教室)として、その中の$oneにアクセスしたいときは
$class -> $one

というように表記します。

つまり、
$this -> db -> prepare(“~”)
とは、$thisというクラスの中のdbがもつprepare(“~”)を、$stmtに代入しているということですね。合ってるかなぁ・・・


さらに
prepare(“INSERT INTO `user`(`username`, `passwd`)VALUES(?, ?);”);
について、prepareはプリペアドステートメントと呼ばれるものを利用するための関数です。
プリペアドステートメントとは、SQL文を最初に用意しておいて、その後はクエリ内のパラメータの値だけを変更してクエリを実行できる機能のことです。
クエリとは、「問い合わせる」という意味で、抽出などの要求を送信することができます。パラメータの値を変更する、この場合だとユーザーネームを変更するだけでアカウントを登録することができます。
この機能を利用することでクエリの解析やコンパイル等にかかる時間は最初の一回だけで良くなり、より高速に実行することができます。


次にINSERT INTO num VALUES (a,b);とはレコードの追加を表す分です。
Numというレコード(データ)を(a,b)に追加します。
この場合、`user(=ユーザーネーム)`と`(user,passwd)(=それに対応するパスワード)`を、(?, ?)の場所に追加するという文になります。

入れる場所が「?」だと入れられないのではと思ったのですが、(?, ?)の「?」は後から値を入れるために仮に置いておくもので、指定は別のプログラムが行います。


長くなりましたが、つまり$stmtに代入されるのはユーザーネームとそれに対応するパスワードが格納された、$thisの中のdbというものにある(?,?)を代入します。




次は
return $stmt -> execute(array($this->userName, password_hash($this->passwd, PASSWORD_DEFAULT)));
についてです。

前回のfunctionとは再帰関数のことなので、求めた値をメインプログラムに戻す作業があります。
その戻す作業をどこで行うかを指定するのが「return」です。
「return」に記述された命令が終了した時点で、値はメインプログラムに返されます。




Returnの文を解読するのは大変なので、分からなかった「execute」、「array」について調べていきます。




まず「execute(=実行)」とは同一セッション内に「prepare」文を前もって作成してからでないと実行できません。
Prepare文でパラメータが指定されている場合、それをexecuteが受け取り実行される必要があるからです。

例えばユーザーネーム、パスワードを入力してから、prepareで入力された情報を読み込んでからでないと、executeはパラメータの情報を取得できません。



次に「array(=整列)」とは、配列を生成するための関数です。
例えば配列「$class」に要素'one’、’two’、’three’のみっつを入れたいとすると、

$class = array(‘one’,’two’,’three’);

と記述されます。

つまりこの場合
$this->username、 password_hash($this->passwd,、PASSWORD_DEFAULT
の3つの要素が入った配列がメインプログラムに返される、という命令です。




ここまででアカウントの登録ができるようになりました。
解読していくと意味が解って、すごい面白かったです。
でも疲れたので残りふたつのプログラムは内容ができたらブログにあげます・・・。



以上!