ステップアップ備忘録

学習用備忘録

ログイン機能を実装してみる

今回はdotinstallのPHPでログイン機能を実装するの項目についてのまとめ
気になったこと、引っかかってもたついた点を重点的に

MVC設計


ユーザーインターフェースを持つアプリケーションソフトウェアを実装するためのデザインパターン

  • Model → データベースの参照などのアプリケーション固有の処理部分や状態遷移部分を記述(ビジネスロジック部分)
  • View → 表示画面に関する部分
  • Controller → ModelとViewの制御をする部分
    • validation(検証)やsessionの管理、エラーハンドリング、リクエスト処理など
  • ユーザーインターフェース(UI) → 機械↔人間でやり取り(入力や出力)を実現させる方法(仕組み)

オートロード


  • spl_autoload_register → 指定の関数をautoload()の実装として使う
  • substr→文字列の一部を返す
  • str_replace→文字列の置換をする
  • strpos→文字列内の部分文字列が最初に現れる場所を見つける

名前空間、サブ名前空間

  • 名前空間→定義することで、そのファイルが同じ空間に属していることを示す
    phpは同じ関数名が違うファイル内でも定義ができない(エラーになる)が、名前空間が違うと同じ関数名の定義が可能になる
  • サブ名前空間ディレクトリの構造のように階層を持たせた記述の仕方(「 \ 」で区切る)

ページのリダイレクト


  • URLを定数で管理するメリット
    • 複数回使用するときなどの打ち間違いの防止
    • アドレス変更があった際の時間を短縮する

formタグ(html)のオプション


  • action→送信先のURLを指定、一番優先される
  • method→送信方法の指定
    • get→URLとして送信する、URLの後ろ?以降に表示される
    • post→本文として送信する、URLには表示されない

データのフィルタリング


  • filter_var → 指定したフィルタでデータをフィルタリングする
    • FILETER_VALIDATE → 検証フィルタ

javascript(onclick)


stdClass、get_object_vars


  • stdClass→クラスを定義していないデータ(配列)について、オブジェクト形式での保存を行う、内部定義関数
  • get_object_vars → 指定したオブジェクトのプロパティを取得する
    (スコープ内でアクセス可能なこと、非staticプロパティであることが条件)

prepareステートメントにおける名前付きパラメータと疑問符パラメータ


  • 名前付きパラメータ → 名前を指定した値を使用してプリペアステートメントを準備し、実行する。名前付きパラメータの前には「 : 」がつく

/ 値の配列を渡してプリペアドステートメントを実行する /
$sql = 'SELECT name, colour, calories FROM fruit WHERE calories < :calories AND colour = :colour';
$sth = $dbh->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));
$sth->execute(array(':calories' => 150, ':colour' => 'red'));

引用元PHP公式マニュアル

  • 疑問符パラメータ → 名前付きパラメータの「:変数」の部分を「?」に置き換えたもの、名前を指定していないので実行前(もしくは実行時)にわざわざ連想配列を作らなくてもいい

$sth = $dbh->prepare('SELECT name, colour, calories FROM fruit WHERE calories < ? AND colour = ?');
$sth->execute(array(150, 'red'));

引用元PHP公式マニュアル

セッションハイジャック


  • いわゆる「なりすまし行為」で被害が大きくなりやすい(管理者権限を奪われたりなど)
    • 対策
      • フォームデータ上のhiddenフィールドでやりとりする
      • ワンタイムセッションID(都度IDが変わる)を発行する

PDO(fetch)とパスワードハッシュ


  • fetch_class → クラスの新規インスタンスを返す

  • password_hash → パスワードのハッシュを作成する

    • ハッシュ → 固定長のランダムに見える値に不可逆変換する
  • password_verify → パスワードがハッシュに適合するかを調べる

まとめ


  • MVC設計について
    前に一度他で触れる機会があったときは内容がほとんど理解できておらず、 かなりもたついたので、今回dotinstallで触れる機会があってよかった。
    MVCのそれぞれがどういうプログラムを置いておく場所で、お互いがどういう風に作用していくのか流れが見えたので、 今度MVC設計の考え方で作る際はもう少し考えやすいはずと思えるくらいの理解ができた。

  • 名前空間についても改めて調べることで名前空間がなぜ必要かや、useはどんな役割を果たすのかなど感覚的ではない理解ができた。