よくわかるPHPの教科書 1周終えて詰まったところと分かってないところ
こんにちは。Toshiです。現在通っているプログラミングスクールでPHPの学習をしていて、テキストとして「よくわかるPHPの教科書」を使用しています。
スクールではこのテキストを3周することが課題とされていますので、まず1周終わった感想などを振り返りとしてまとめます。
2019年9月8日追記:プログラミングスクールに通って、エンジニア転職をはたしました。実際に働いてみてからの記事と、プログラミングスクール通うまでに行っていた独学・挫折などについても記事にしたのでご興味あれば読んで頂けると嬉しいです。
かかった時間と日数
このように、全体で8日間かかり、学習時間は24時間ほどでした。1周目はとにかく最後までたどり着く。を目標にしていたので、理解度はかなり低いです。
全然出来ない自分にムカついたのでPHPのテキスト残り全部終わらせた。1周するのに8日間、時間は約24時間かかりました。2周目以降は、PHPの基本的なところはかなり飛ばせるから時間短縮できる。mySQLのあたりはちゃんとやろう。やるっきゃないない! pic.twitter.com/0hsijj6ytJ
— トシ@プログラミング学習中 (@toshi65811) January 15, 2019
テキスト開始時の知識
このテキスト使用開始時の私のPHPの知識としては、ProgateでPHPのレッスンを何度か繰り返したくらいです。(結構前にやったので、オブジェクトのこととかほとんど覚えてません)
どのように学習を進めたか
テキストだけだと理解が難しい部分があったのですが、スクール生からUdemyのビデオを勧められてテキストと併用しています。(Udemyは頻繁にセールをやります。私は1,200円の時に買いました。セールやってないなら買うのを待つか、このテキストを使う予定なら先に買っておくのもあり)
テキストと同じ方が作成されたビデオで、やることの流れもテキストとほぼ同じなので、独学でやるならビデオも合わせて利用されることをオススメします。
ちなみに私のやり方としては
- まずビデオ(1.5倍速)でこのレクチャーで何をするかの概要を掴む。ここでは単に見るだけでコードは書かない。(2周目後半の今では、1周目から1.5倍速はちょっと無理あったかなと思っています)
- 概要を理解したら、テキストを見ながらコードを書く。(ビデオと若干違うコードを書く場合があるので気をつける。例としてechoがprintになってたりとか)
- もう一度ビデオを見て、今書いたコードがどのような働きをしているのか?を理解する。
こんな流れで進めています。テキストで説明読むよりは、動画で説明を聞いたほうが私は理解しやすいです。補足的にテキストも読みますが、大抵動画で説明されたことと同じことが書かれています。
ただ、後半になってくると1つのビデオが長くなってくることがあります。(1つのビデオで10分超えたりとか。)そうすると、1のまずビデオ見て概要を掴む。が複数の内容に渡ることがあります。その場合は、全部のビデオを一度見るより、1つ1つの内容ごとに区切って進めるほうが理解を伴って進めやすいと思います。
作業環境としては、自宅であれば外部モニターでビデオを見て、手元のMacでエディタを開いてコードを書いています。外で作業するときは、このようにiPadでビデオを見てMacでコードを書いています。
ビデオ見ながらエディタも開く。をやるにはおそらく15インチ以上の画面サイズがあったほうがいいかなと思います。13インチでやると、やれなくはないですがこんな感じです。これMacのスクショ撮ったのですが、どれくらいの広さか全然伝わらないですね。
実際に並べてやると、Udemyの画面がかなり小さくなり、ビデオ内のコードの可読性がかなり低くなると思います。
1周終えるまでに詰まったところ
1. Chapter 3-1 エラーメッセージを表示する
エラーメッセージ表示のために、iniファイルの編集をしないといけないのですが編集するファイルを間違えてました。テキストの書き方だと、MAMP/conf内のファイルを編集するっぽく読めるのですが、正しくは、MAMP/binの中にあるiniファイルの編集をしなければいけませんでした。
対処方法として、phpinfoで設定画面を開き、その中に php.ini ファイルがどこにあるのか書かれているので、正しいファイルを編集しているか確認することが必要です。Loaded Configration File という項目です。
phpinfo関数による設定内容の確認 | PHPインストールと初期設定
ファイルの位置がLoaded Configration Fileから分かったら、ターミナルからファイルを開くと間違いがなく安心です。(スクールの先生ともくもく会でコーチの方に教えていただきました😭)
2. Chapter 5-2 MySQLへの接続
Stackoverflow見て解決。port 8889を入れてあげなければいけなかった。なので、
$db = new PDO('mysql:dbname=mydb; host=127.0.0.1; port=8889;charset=utf8', 'root', 'root');
となる。
mysqlに接続できず泣きそうになったが事なきを得る。ポート番号の設定が必要だったみたい。
— トシ@プログラミング学習中 (@toshi65811) January 11, 2019
mysql - PHP Connection failed: SQLSTATE[HY000] [2002] Connection refused - Stack Overflow https://t.co/M351Df57BW
3. あとこれ。テキストのどの辺だったか忘れました。
TIMESTAMP型カラム入れようとしたらエラー。default値だと0000-00-00になるからダメみたい。デフォルトをcurrent-time-stampにして解決。ingore optionは使わないほうがいいらしい
— トシ@プログラミング学習中 (@toshi65811) January 12, 2019
mysql - Invalid default value for 'create_date' timestamp field - Stack Overflow https://t.co/r045mZ6pkY
4. Chapter 5-2 execを実行する
ここでデータをSQLを使って挿入するのですが、ビデオのコードを見て、エディタで実行してもうまくいきませんでした。データが挿入されないのです。
もし同じ状況になられたら、何が問題なのかはブラウザ上ではわからないので、ここで行うexec内のINSERT INTO以下をphpMyadminのSQLで実行されることをオススメします。
私の場合はsalesに数値をしてしていなかったのでエラーが出ていました。(テキストのコードはsalesに値を入れるように指示があります。)
Chapter 6でログアウトがうまく出来ない。という問題がありました。これはindex.php内に書いたログイン情報が残っているかどうか。を確認するコードの位置の問題なのか明確ではないので、それに関してはスクールの先生に聞いて明確にします。
1周終えて分かってないところ
- Cookieってなに
- Sessionってなに
- MySQLのリレーションの貼り方なんやねん
- 変数から値を取り出す方法曖昧
- Get, Postの違いとは
- htmlspecialchars, ENT_QUOTESとりあえずおまじないとして入力してるけどなんやねん
- ->ってどんな働きしてるの
- ASって分かるっちゃわかるけど、説明しろと言われたら分からん
- fetchってなんや
ざっとこんな所でしょうか。Chapter 5以降はもうただただ写経って感じだったので、何がどうなってるのかはよく分からず進めていた感満載です。
2周目でやっていくこと
上記のとりあえず8つは2周目で理解を深めていき、3周目でなんとなく説明できる。くらいまではなりたい。今2周目のChapter 4途中くらいまで来てますが、Cookieなど少し分かってきました。(分かった気になってるだけ)
->のアロー演算子もこの記事を読むことで理解が深まりました。このあたりはオブジェクトのお話なんですね。
テキスト著者様からリプいただけて、オブジェクト指向のことは今はそんな深掘りしないほうがいいのかなとも感じました。
オブジェクト指向は、PHP自体が対応したのがかなり後になってしまい、中途半端なので PHPでオブジェクト指向を学ぶのは難しいかもしれず、Rubyなどを別途勉強した方が良いかも知れません!
— たにぐち まこと/学ぶ。をちゃんと (@seltzer) January 16, 2019
あとは、先日参加したもくもく会で指摘を受けたのですが、デバックのやり方が全然わからないのは問題だなと感じています。var_dump( )を使うとよいと聞いたので、スクールの先生に質問する前にある程度は自身で問題の切り分けを出来るように力をつけていきたいです。
昨日説明していただいたデバック方法は概ねここに書かれていることなんだな。ふむふむ
— トシ@プログラミング学習中 (@toshi65811) January 16, 2019
忘れてしまうPHPのデバッグ方法 - Qiita https://t.co/Z0B0SifAEX
2周目は理解を深めることを意識しつつ進めます。とはいえ、実際になにか作りながら学ぶのが一番だと思うのでスピード感を意識して早めに終えるようがんばります!
早くなにか作りたい!
※2周目突入前にこの記事読んでオブジェクトに対して少し理解深めたらかなりテキストの理解がスムーズになりました。