ほぼ独学でPHPerになったITかあさんが言いたい、PHPのオススメ勉強法
エイプリルフールですが、これと言って嘘の予定はありませんITかあさんです。いつかはこんなことを書いてみたかった
PHPのオススメ勉強法について
やや長文になりますが、WEBデザイナーからほぼ独学でPHPerになったITかあさんの目線から色々PHPの勉強について語ってもよいでしょうか?
個人の価値観、他言語のプログラマーがPHPを勉強する際では状況も異なると思うので、ここでは
他言語の経験がゼロでPHPを学ぶ人を対象に
語りたいと思います。
そもそもPHPっていうのはナゼ動くか
WEBデザイナーのころはイマイチPHPの仕組み自体よく分かっていませんでした。
Apacheが動かしているんじゃないの?
と思っていましたが、
ApacheはWEBサーバー
のことで、URLを叩いたらHTMLが表示されたりする「WEB環境の基本」です。
もちろん、WEB環境としてのApacheが起動していないとそもそもPHPも動かないのですが、
「PHPをサーバー上にインストール」しているからこそPHPは動くのです。
PHPはサーバーサイドスクリプト
サーバーサイドスクリプト
なんて言葉を聞いたことがあるかもしれません。PHPはこのサーバーサードスクリプトの一種であります。
Webでプログラムの実行が要求されて初めてその結果をブラウザに対して送信されます。
つまり、
ユーザーがフォームの送信ボタンを押したり、ブラウザを開いたりして初めて動く
それがPHPなのです。
PHPで出来ないこと
PHPは『WEB専門言語』であって、『サイトのユーザーの要求に対して』結果を返すため、例えばブラウザが全く開かれていないなど、一切の要求が無いと勝手に動くことはありません。
このため、PHPだけで『全自動』なプログラムを作ることが出来ません。その場合はサーバーに定期実行をさせる『cron(クーロン)』を設定させる必要があります。
そのことからも、PHPでWEBプログラムをするに当たっては多少のサーバーの知識も必要になってくるのです。
なぜPHPはよくdisられてしまうか
他の代表的なサーバーサイドスクリプトに
JavaやPerlやRubyなどがありますが、どの言語も汎用性があり、WEB以外にも使うことが出来ます。それに対しPHPはWEB用であり、PHPを使ってソフトウェアiPhoneアプリやWindowsアプリを開発することは出来ません。
あくまでもWEBアプリケーションしか作れないのです。
ソフトウェアという単語はよくありませんでした(WordPressもブログソフトウェアですしね)、訂正
しかもPHPは他言語に比べて習得が容易であることからも『え?あなたPHPしか出来ないの?』とたまにdisられてしまうんです。
簡単に習得出来るのは、非常によいことだと思うのですが・・
PHPは簡単か?(いや、そうでも・・)
私は最初から職業がプログラマーだったわけではなく、WEBデザイナーからだんだんWEB系のプログラマーにシフトしていきました。(このブログが始まったばかりころはまだWEBデザイナーだったんですよ)
どういう要求が来ても、対応出来るようになったのが本格的にプログラミングをやって2年くらいかかりました。
プログラム全く何もしらない未経験の人からすると、
決して簡単ではないよね、PHP・・・
って感じです。
ズバリ、完全に独学することは可能か?
PHPに限らず、プログラミングのスクールに通うのはお金かかりますよね
私はPHPを勉強したのは
ほぼ独学
と言っており、実は全てが独学ではありません。
PHPを学ぶ上で苦労したところ、独学では難しいところ
配列が分からない・・
参考書の構文解説などで配列について項目がありますが、私は配列が本当に分からなかったです。
特に連想配列の意味が分からない
連想配列の意味が分からず、ここは苦労しました。
私が愛するCakePHPもそうですが、SQLでデータベースの情報を要求すると連想配列で結果が返ってくるので連想配列が分からないとPHP+データベースで何か大規模なプログラムを作ることは出来ません。
逆を言えば、連想配列さえちゃんと理解出来れば後はGoogleで検索すれば自然と答えが見えてきます。
一から十まで全てをスクールに通うとお金もかかり大変ですから、
小規模な相互リンク管理のプログラムをPHP+Mysqlで作ってみるまでの簡単なフローをプログラムの家庭教師を雇って教えてもらうといいかもしれません。
ちなみに私は某スクールに3万円ほどでこの一連のフローを学びました。
構文や関数何を覚えればよいか
構文は全て覚える必要なし!
PHPの構文はたくさんありますが、基本3つが使えればOKです。
if文
foreach文
for文
while文・・・たま~に使う、くらいかな~
配列を扱うに当たり、foreach文とfor文の2つをマスター出来れば基本的なWEBサイトのプログラムを作ることは出来ます。
特に
foreach文を完璧に理解する
ことに私は苦労しましたが、逆を言えばそこだけ誰かに教えてもらえればどうにでもなりそうです。
(foreachだけどうにか出来れば、けっこうどうにでもなりそうですね)
あ、私関数は何一つまともに覚えてないですw
関数は都度Googleで検索すればよいので、関数は覚える必要は何一つありません。
PHPを勉強するならレンタルサーバーで!
PHPを勉強するにあたり、私はぜひレンタルサーバーで勉強されることをオススメします。
なぜITかあさんはレンタルサーバーで勉強することをオススメしたいかというと、
レンタルサーバーならPHPの環境が全て整っているから!
PHPをこれから勉強しようという人がサーバーをゼロから構築するのは現実的ではないですし、ローカル環境という選択もありますが、
環境設定を自分で整えたり、メールの環境を整えなければなりません。
(PHPの入門書で最初のローカル環境の設定に何十ページもとっていたりするんですよ!)
PHPの勉強をするために、その場だけのローカル環境を準備するのは時間がもったいないし、レンタルサーバーの環境に満足できなくなっるくらいPHPの学習が進んでから VPSなどを借りてサーバー構築されるのがいいと思います。
500円くらいのレンタルサーバーであればcronスケジュールを登録出来るものもありますし、最近のレンタルサーバーは専用サーバー並みに環境が整っています。
訂正しました
レンタルサーバーについて 素人スクリプトを公開するのは他の人にも迷惑をかける恐れがあるのでそれは止めたほうがよいとの意見を頂き、
この件は訂正させて頂きます。また、サーバー屋さんも『プログラムデバックの禁止』をしているところが多いことからも良い意見ではなかったと反省しています。
PHPを勉強するにあたり、オススメの書籍
本は2冊容易するのがベスト
PHPを勉強する=Mysqlとの連携
があるでしょうから、PHPの入門書とMysqlの入門書2冊あったほうがいいです。
ITかあさんがボロボロになるまで愛読したPHPの入門書はこれ!
PHPのオススメ解説本
全体的に文字も大きく読みやすいです。PHPの入門書は余計な解説に終始するものが多いのですが、『必要なことだけ』しっかりまとまっている本です。
ただ、Mysqlがコマンドプロンプトから行う形になっており、Mysqlを扱うなら「phpMyadmin」を選択する方法もあるので初心者の方はMysql部分の解説は難しいかもしれません。本全体の2/3に当たるPHPの解説が大変読みやすいです。
Mysqlのオススメ解説本
PHPの解説本はPHPの解説本で、Mysqlの解説本はMysqlの解説本で分けたほうがいいです。1冊にまとめた本も多いのですが、1冊にまとまっているということはどちらの解説も中途半端に終わる可能性があるためそれぞれ分けることをオススメします。
PHPを勉強するに当たり、何から手をつければよいか
とりあえずPHPが出来るようになりたい
そう、思っている人も多いと思います。実際私もWEBデザイナーのころからそう思っていて、
WEBにおける全ての工程を自分一人で出来るようになりたい!
と思っていました。
いきなりPHP+Mysqlの大規模サイトはしんどいですから、小さいものからコツコツ作ってレベルアップしていくのがいいです。
CSVファイルのPHP出力
まずは超単純なCSVファイルをPHPの配列を理解する上で、連想配列ではない、一列の配列を出力してみるのがいいと思います。まずは配列出力の基礎の基礎ですね。
SESSIONを利用したメールフォーム
SESSIONを利用したメールフォームはプログラムの基本です。またWEBデザイナーの時には中途半端な知識のままフォームのコーディングをしていましたが、フォームをしっかり作れるようにならなければプログラムは作れません。
なお、このサイトでもPHPメールフォームの詳しい作り方を解説しています。
ログファイルベースの掲示板
掲示板にかかわらず、何らかのログファイルベースの掲示板や相互リンク管理を作るといいと思います。
PHPを学ぶ上でパーミッションに対する理解も必要なので、このパーミッションに対する理解が深まります。
ログファイルベースからデータベースに
ログファイルベースで作ったプログラムをデータベースで対応します。
SQLに関する知識はこの時初めて勉強するので十分です。
また、PHPでMysqlにアクセスする方法としてmysql_connect()などがありますが、実は私はほとんど使ったことがありません。絶対にそうすべき!と言うつもりはさらさらありませんが、PHPライブラリでPEARがあり
PEAR:MDB2
と、いうプラグインがあります。
これを使うとPHP+Mysqlの連携が容易になるし、結果が全て連想配列で返ってくるのでforeach構文が使いこなせればすぐにでもプログラムの構築が可能です。
しかも、PHPってフレームワークを使うようになるとまず自分でmysql_connectの関数を書く機会はありません。
このため、余計な知識を付けるくらいなら より簡単なプラグインを使うことをオススメしたいのです。
(ちなみにこのPEAR:MDB2はレンタルサーバーならほとんどがあらかじめインストールされており、自分で使うために設定することは何もありません。)
最後にオープンソースフレームワークを
ここまでの工程を踏んで、最後にオープンソースのフレームワークを使うと、これまでの知識が活かされてスムーズにフレームワークを扱うことが出来ます。(ぜひ、CakePHPをオススメしたいですっ)
私はほとんが仕事での実務でこの工程を踏んできました。私は半年でフレームワークを使うようになりました。あまり習得が早いほうではありませんでしたから、熱心な方は3カ月くらいで可能な人もいるでしょう
フレームワークを使うとMVC(モデル・ビュー・コントローラ)の概念が出来、フレームワークの仕様に乗っ取って「クラス」や「独自関数」も書くようになります。
これだけは言いたい!
よく
PHPを○○日で学ぶシリーズ
とかありますが、
んな数日で出来るか、ボケぇぇぇっ!!
と、声を大にして言いたいです。
配列を制す者はPHPを制す!
私に以前こう言って下さった凄腕のプログラマーがいました。今思えば全くその通りだったと思います。
事実 SQLでDBの内容を取りだしたら連想配列で結果が返ってくるので これを自分の欲しい配列の形に変換する作業はよく使います。
むしろ配列だけやっておけばいいんじゃないの?
と、いう気になるくらい、PHPでサイトのプログラムを作る時は配列の操作を行います。
(後は文字列の操作を行ったり、文字化けの対策もあったり色々ありますがやはりGoogleで調べて解決します)
PHPの入門書は数あれど
配列の重要さ、配列の大切さ、配列への理解を深める書籍
に私は出会ったことがありません。結局本だけで配列への理解を深めるのを諦めてその部分だけスクールで学びました。
配列だけ解説したところで非常に地味なので本としてはつまらないので売れないからだと思います。
なにもPHPに対して理解していなかった時は何となく
PHPって難しそう、でも出来たら何となくスゴそう!
と思っていましたが、実際実務で扱うと
地味!
なんですよ。
まだまだ自分自身 美しいPHPのコードを学んだり、より効率的な記述を模索している最中ですが、
私はPHPが大好き
ですし、よりたくさんの人に『PHPの楽しさ』を伝えていけたらいいかなと思います。
2013.04.02追記
一晩で250近くもハテブを頂くとは思わず、『いい意味』でも『悪い意味』でも反響を頂きました。
誤りの部分は真摯に受け止めるとして、本当に『ド素人』からWEB系のプログラマーとして独立した現在、
『自分がPHPを学ぶ上で本当に苦労したこと、配列の大切さ』を伝えたかったのです。
批判の意見も 私自身がまだまだプログラマーとして未熟な部分もあるからでして、自分自身もっと努力してPHPの楽しさを伝えていきたいと思います。