1日だけのWebプログラミング入門講座有効なのか受けてみた所
先日、Webプログラミングの入門講座に行ってみました。
…がちょっと突っ込みどころがいっぱいありました。・ω・;
・最近Webアプリの構築手法の一つとして、主流になりつつあるMVCモデルプログラミングについてはかすりもしない。
・MySQLを扱うのだが、 現在PHPで提供されている3種類のAPIである mysql、 mysqli、PDO については説明がなく PDOを使用。
・プログラムの可読性を高めるために、関数にしたりせず、while(true)を使ったりひたすら長いfor文や長いネストを使ってプログラムする。
・プリペアドステートメントがSQLのインジェクションを防ぐためだけに後付けで生まれた記法で、この記述方法は本来おかしいという説明。
・顧客情報追加プログラミングを営業向けに実用化するプログラミングについての解説が、入力数値などのチェックだけしか触れなかった件。
・プリペアドステーメントはクローズしなくていいのかと聞いたら閉じる必要はないとのこと。(自信はないが違和感)
SOHOでプログラムするにはいいかもしれないけど、チームでプログラミングしたり、あとでメンテナンスする場合には大変なことになりそう…ってのが感想でした ・ω・
同じ受講者の人にも分かってほしいなと思ってもやもやがあったのですが、伝えられなかったので、ここで愚痴ることに ・ω・
MVCモデルプログラミング
PHPのオブジェクト指向入門 | オブジェクト指向PHP.NET
よく、現場で問題になってるのが、古いエンジニアがオブジェクト指向プログラミングをするとソース読めないから、C++やJava でも、MVC使うな!とか クラス使うな!とかいう混沌とした話なんですが。
今回は講師の方がそれを地で、入門講座として教えるような感じでした。
MVC使ったプログラミングは、簡単に説明すると、その機能ごとにModel View Control にクラスを分けて処理するんだけど、こうすることによって資産を別のWebアプリケーションで再利用するのが容易になったり、ソースの可読性が上がったり、メリットがたくさんあるのでPHPでも注目されているんだ。
プログラムの勉強にそんなに時間をかけなくても1週間あればどんな言語でもマスターできる
って話だったのだけど、正しくは、プログラムの構文やできることなどを1週間くらいで理解した上で、
プログラミング手法を2週間くらいかけて勉強しないと、Chaosなコードを書くプログラマーが大量生産
されるという事態になるような気がするんだけどなぁ ・ω・;
MySQLで提供されているAPI
PHP: どの API を使うか - Manual
PHPの公式サイトを見ると、APIの特徴やどれが推奨なのかがかいてあります
PDOとMySqliが推奨なのですが mysqliはMySQL専用な半面、PDOは移植性が高い代わりに、MySQL固有の機能が呼び出せないなんて背景があります・ω・
日本語では両方推奨になっていますが、英語だと MySQLiの方が優先になっていて、その理由として、PDOで複数文のMySQLサポートを使用するために、v5.3以降で実装された、追加ドライバが必要なことをあげています
プログラム手法について
for(){ 処理0 while(1){ 処理1 for(){ 処理2 while(1){ 処理3 for(){ 処理4 while(1){ 処理5 : } |
今回はやらなかったんですが、PHPだけで応用問題を書いた場合の処理について、正解がこんな風になるという解説をされて、ちょっと眩暈が…。
ネストの中身を関数化して外に出すだけで見やすくなるよ!・ω・
function func2(){ for(){ 処理4 while(1){ 処理5 } } } function func1(){ for(){ 処理2 while(1){ 処理3 func2(); } } } for(){ 処理0 while(1){ 処理1 func1(); } } |
プリペアドステートメントの記法
$stmt = $dbh->prepare("INSERT INTO REGISTRY (code, value) VALUES (?, ?)"); |
こんなやつです・ω・
文字列の連結を使った方が美しいという説明でしたが、SQL文をコードの中に埋め込むと後でメンテナンスするときに大変になるので、定数などに置き換えてしまう方がメンテナンスなども優れています。ファイル連結がそのままあると定数に置き換えることができないので逆に扱いにくいと感じます
//別ファイルで定数管理 define("SQL_INSERT1","INSERT INTO REGISTRY (code, value) VALUES (?, ?)") : $stmt = $dbh->prepare(SQL_INSERT1); |
こんな感じ・ω・
顧客情報追加プログラミングに必要な話
実際のシステムとして作るときには入力されたデータが数値かどうか判断する必要があります。と言う説明だったけれど、実際は、入力されたデータが別のデータベースに存在する値なのかを検索してチェックしたり、すでに登録済みのメールアドレスじゃないかチェックした上で登録するという処理をしないと、データベースが重複したり、存在ない値を参照したりして大変なことになってしまうよ! ・ω・
プリペアドステーメントは本当にクローズしなくていいのか
PHP: PDOStatement::closeCursor - Manual
SQLのドライバによっては、 close しないと、複数プリペアドステーメントを実行したときに、処理が行われないことがあるって認識でいいんだろうか・ω・
「Javaみたいに不要になったら勝手に閉じてくれるので、閉じる必要はない」って回答にちょっともやもや。
関数化しないって部分だけ見ても、Debugするのも拡張するのも、後から困るんじゃないの?
って素人でも分かりそうなんですが・・・。
関数化しないって部分だけ見ても、Debugするのも拡張するのも、後から困るんじゃないの?
って素人でも分かりそうなんですが・・・。