Webプログラミングの基礎
プログラミング初心者が、独学でWebプログラミングを習得するための 基本となる学習事項を解説します。
目次
Webプログラムの基本構成
プログラムは起動から終了まで様々な処理を行っていきますが、 Webプログラムでは、下記のいずれかの処理に分類できます。
Webプログラムのライフサイクル
・入力データの受取 ・データの変換 ・データの出力処理
このサイトではこの3分類を元に、効率良く学べるように解説していきます。
具体的にソースコードを見てみます。
<?php
/* 入力用変数 */
$input = '';
/* 入力データの処理 */
if (isset($_GET['a'])) {
$input = $_GET['a'];
}
/* データの変換 */
$input = htmlspecialchars($input, ENT_QUOTES, 'UTF-8');
/* データの出力処理 */
echo $input;
やっている事
・変数 $input を用意 ・$_GET にキー a がセットされているか判定 ・セットされていた場合 $input に代入 ・$input のデータをエスケープ処理で安全なデータに変換 ・echo でデータを出力
Webプログラムは、この一連の流れで構成されています。
Webプログラムで入力データを受け取る方法
PHPプログラムでは、入力データは主に下記のいずれかから取得します。
入力データの受取元
$_GET $_POST $_SERVER $_COOKIE $_FILES $_SESSION ファイル データベース 外部取得データ メモリ
入力とはブラウザから受け取ったもの、データベースに保存していたものなど様々ですが、 通常、一時的に変数に代入してから処理を行います。
基本的な処理対象(初級者向け)
$_GET は、URL情報 $_POST は、フォームから送信されたもの $_SERVER は、そのアクセス時のサーバやユーザー情報 $_COOKIE は、ブラウザから送られてきたクッキー情報 ファイル は、サーバに設置されたファイルデータ
上の入力処理を扱えるだけでも十分にWebプログラムを開発する事が出来ます。
一般的な処理対象(中級者以上)
$_FILES は、ファイルアップロード時のファイル情報 $_SESSION は、そのアクセス時のセッション情報 データベース は、DBサーバに保存されたデータ 外部取得データ は、外部URLなどから取得したデータ メモリ は、サーバ上のメモリに保存されたデータ
他者のプログラムをカスタマイズしたり、フレームワークを使いこなすためには 上の入力処理を扱える必要があります。
フレームワークとは、プログラムの骨組みが構築済のプログラム群です。 よく使われる処理が洗練されたかたちで実装されています。 フレームワークごとのルールや仕様を覚える必要があるため 初学者には不向きですが、開発の生産性を上げるために利用されています。
入力データの処理は、下記の要点にまとめられます。
・データを取得し、処理分けを行う ・適切な変数を用意して代入する
<?php
/* $_POSTデータ受取 */
function gPOST($k){ return isset($_POST[$k]) ? $_POST[$k]: ''; }
/* 処理分けの例 */
switch(gPOST('mode')){
/* 登録処理 */
case 'regist':
regist();
break;
/* フォーム処理 */
case 'contact':
contact();
break;
}
function regist(){
/* 適切な変数を用意して代入 */
$data = array(
'name'=>gPOST('name'),
'email'=>gPOST('email'),
'table'=>'users'
);
$DB->save($data);
}
function contact(){
/* 適切な変数を用意して代入 */
$data = array(
'subject'=>gPOST('subject'),
'text'=>gPOST('text'),
'table'=>'contact'
);
$DB->save($data);
}
やっている事
・function gPOST(){} でPOST送信データを受け取れるように ・switch(){} でPOST送信データ内の mode の値により処理分け ・連想配列 $data を作成し、保存処理へ受渡し
Webプログラムでは、例えば会員登録や商品購入など、全体として複数の処理を行う必要がありますが、 取得データの内容によって「処理分け」を行っています。
さらに詳しく
フレームワークでは、ルーティングに該当し、リクエストのURLから、割り当てのコントローラクラス(特定の処理群) を読みこんで、メソッド(特定の処理関数)を実行したりします。
<?php
/* URL情報からコントローラクラスを判定 */
$path = explode('/',$_SERVER['QUERY_STRING']);
/* クラス名 */
$class = $path[0];
/* メソッド */
$method = isset($path[1]) ? $path[1]: 'index';
if (file_exists($class.'.php')) {
require $class.'.php';
$ctrl = new $class();
if (method_exists($ctrl, $method)) {
$ctrl->$method();
}
}
Webプログラムでのデータ変換とは
プログラムのメイン処理となる部分です。入力データを出力するために、適切な状態へ変換を行う処理となります。
例えばブラウザに表示するためにエスケープしたり、データ保存を行うために 連想配列に入力したり、ajaxのレスポンスを返すためにjsonデータに変換するなどがあります。
データの変換は、以下の要点にまとめられます。
・表示するためのデータ変換 ・保存するためのデータ変換
さらに詳しく
データの変換を行うためには、入力データの状態を把握している必要があり、 また出力データの状態も把握している必要があります。 具体的には、入力データのフォーマットやあり得る種類を設計しておいたり、 出力データのフォーマットの知識や設計が必要になります。
例えば入力データ $_GET、$_POST の状態は、基本的にその処理に遷移する前画面となる HTMLタグに依存するので、リンクURLやFORM要素を把握するようにします。
また出力では、保存先となるDBやテキストデータの仕様に合わせて、 保存前の変数の状態を適切なものへと操作することになります。
/* カンマを除去する処理 */
$text = str_replace(',','',$text);
/* カンマをエスケープする */
$text = '"'.$text.'"';
csvファイルに保存する場合、「,」は制御文字に使われるため、エスケープする必要があります。 完全に除去してしまうか、「"」で括るなどの変換処理を行います。
/* DBへidとtextの連想配列で保存する仕様の場合 */
$data = array(
'id'=>$id,
'text'=>$text
);
$DB->save($data);
フレームワークなどでDBへ保存する場合、連想配列へ割り当てるだけで保存できる事が多いです。 この場合は、DB処理が実装済なので、その仕様を理解した上で、目的の連想配列を作成する事になります。
Webプログラムのデータ出力処理
変換が行われた入力データを、ブラウザに表示したり、データベースに保存したりします。 出力処理は、表示用のHTMLタグや修飾用のcss、DB処理のSQL文など、コーディングを行っている プログラミング言語以外の知識が重要となってきます。
入力データを再利用するためには、データベースに保存、ファイルに保存、メモリに保存などの保存処理が必要となります。 また負荷対策としてキャッシュ化したり、効率良く処理するためにデータ構造を設計したりしますが、 出力処理のコーディングに影響します。
データの出力処理は、以下の要点にまとめられます。
・変数を表示 ・変数を保存
<?php /* 表示用PHPコード */ ?>
<div>
<?php foreach($DATA as $d): ?>
<?php /* 連想配列から表示したいキーを指定 */ ?>
<?php eh($d['text']); ?>
<?php endforeach; ?>
</div>
さらに詳しく
データの出力処理は、フレームワークではビューやモデルに該当します。ビューでは表示テンプレート用に変数を用意する必要があるため、 データの変換処理と密結合になりがちです。
密結合とは、処理が互いに依存していて分離しにくい状態を意味します。メンテナンス対象となるプログラムコードを 最小限にするためには、コードの再利用性を高める必要があります。そのための考え方として、フレームワークのMVCがあります。
フレームワークの「MVC」
Model(モデル):データを扱う View(ビュー):データを表示する Controller(コントローラ):データの作成、受渡しを行う
モデルでは、データベースの状態やバリデーションルール、SQL文などを定義します。 処理の内容を定義していく、決めておくと考えることで、分離しやすくなります。 ビューでは、表示用の変数を処理するだけで、テンプレート化しておくものと考えます。 コントローラでは、モデルに定義した処理を呼び出し、ビューで表示する変数を作成していきます。
このサイトでは、さらに効率良く学習するために、入力処理、変換処理、出力処理で考えていきます。
モデルには、入力処理と出力処理が存在し、データ取得、データ保存を行います。 ビューには、変換処理と出力処理が存在し、ブラウザ表示用の変換処理を行います。 コントローラには、入力処理と変換処理、出力処理のすべてが存在し、 ブラウザからのデータ受取、表示・保存のための変換処理、ページ遷移やダウンロードなどの出力処理を行います。