LoginSignup
17
6

More than 5 years have passed since last update.

ほぼゼロからPHP7を勉強して大変だったところ

Posted at

自己紹介

はじめまして、株式会社シーエー・アドバンス技術統括本部の@ihahajimeと申します。 
開発知識を身に付けよう!という研修の一環で、PHPを勉強してます。
開発言語は学生時代にJavaを講義で勉強した程度で、
卒業してからはほぼ触ることすらなかったくらいの初心者です。
こういう記事を書くのも初めてですが、どうぞ宜しくお願い致します。

はじめに

今回は研修で勉強しているPHP7で個人的につまづいたところを、書いていきたいと思います。
PHP7を動かす準備はMAMP、Githubを使い更新箇所などの管理を行い勉強していってます。
下記の書籍を参考にしています。

つまづいたところ

自分が勉強してつまづいた箇所、理解するのに特に大変だった箇所です。

  • 連想配列
  • プリペアドステートメントとプレースホルダ

連想配列

Javaを習っていた頃から配列が苦手だったのでイメージするのに苦労しました・・・。

php
$Array = [
  "id" => 000,
  "name" => "あああ",
   "age" => 27,
  ...
]

上記Array配列は、以下の内容となります。

  • Array[id]に000を格納("id"キーの値は”000")
  • Array[name]に"あああ"を格納("name"キーの値は”あああ”)
  • Array[age]に27を格納("age"キーの値は”27”)

→"名前の付けれる容器”に”値”を格納できる配列

プリペアドステートメントとプレースホルダ

こちらもイメージするのに苦労しました・・・。

php
// SQL文を作る
$sql =  "SELECT  *  FROM users WHERE id = :id";
// プリペアドステートメントを作る
$stm = $pdo->prepare($sql);
// プレースホルダに値を格納する
$stm->bindValue(':id', $s_id, PDO::PARAM_INT);
// SQL文を実行する
$stm->execute();

2行目と4行目で、"SELECT * FROM users WHERE id = :id";というSQL文を用意しておき、
6行目では、先ほど用意したSQL文内の:idに変数$s_idの値が適宜代入されていく。

SQLを使用しデータを取得するとき、同じSQLを何度も行うことがあります。
先に変数として当てはめたSQL文を用意しておき、
そのあとに、変数に当てはめる値だけを送り、SQLを実行する。
そうすることで、SQL文を繰り返し使うことができ、処理が効率的になる。

→このような仕組みがプリペアドステートメント

SQLインジェクション対策として、SQL文のシングルクォートのような特別な意味をもつ記号文字を取り除く「エスケープ処理」を行う必要があり、プレースホルダにいったん値を格納することにより、エスケープ処理を自動で行ってくれるもの。

→このような仕組みがプレースホルダ

まとめ

とにかくはっきりとイメージして、流れを理解することが大切ということでした。
頭の中で考えるだけでなく、実際に紙にフロー図を描くなどしてみると、
コードの流れもすぐイメージできるようになりました。

おわりに

他にも悩んだものやつまづいたものありましたが、あげだすとキリがないので、
今回は特に気になっていた箇所について、備忘録として書かせていただきました。
これからまた時間があれば、書いていきたいと思います。
知識不足なところが多いと思いますので、ご指摘やこう考えればもっと分かりやすいよ!等ありましたらお願いします。

17
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
6