ソースコードで学ぶWebプログラミング

PHPプログラミングの基礎

プログラミング初心者が、独学でプログラミングを習得するための 基本となる学習事項を解説します。

PHPプログラムの基本構成

プログラムの記述方法には、プログラミング言語ごとにルールが存在します。 このページでは、PHPについて解説しています。

<?php $a = 'もじれつ'; /* 表示 */ echo $a;

やっている事

・<?php 以降がプログラムコードとなる ・変数 $a に = で「もじれつ」を代入 ・/* */ でコメント文(プログラム処理に影響しない文)を記述 ・echo で 変数 $a を表示(代入された「もじれつ」が表示される) ・コードの行末には ; を記述

変数とは、文字列や数値を代入しておける入れ物です。 PHPでは「$」を先頭にして、英字、アンダースコア「_」、数字で変数名を決めます。 ただし$の直後のみ数字は使えません。 一般的に覚えやすい英単語が使われますが、覚える必要のない変数は、 「$i」のような1文字で記述します。

文字列は「'」か「"」で括って記述します。

/* $の直後に数字なのでエラー */ $1 = 'もじれつ';

PHPプログラムの関数を作る方法

プログラムでは何らかの処理を行いますが、まったく同じ処理を何度も行いたい場合があります。 その都度、同じ処理を記述しておくと、あとで変更の必要が出てきた場合に大変なことになります。 関数はそんな時に作成していくもので、一度作成してしまえば、呼び出すだけで再利用でき、 あとでの変更も一箇所で済むという利点があります。

<?php /* 加算する関数 */ function plus($a,$b){ return $a + $b; } echo plus(1,2);

やっている事

・function plus(){} で関数を定義 ・plus() で定義した関数を呼び出し ・plus(1,2) の1,2 が関数へ渡す値(引数)となる ・「+」 で数値を加算(足し算)している ・return で関数から戻ってくる値(戻り値)を指定 ・echo で関数からの戻り値を表示

function 関数名(){} のかたちで関数を作成(定義)します。{} 内に処理内容を記述します。 関数は入力を受け取って処理を行い、値を返す事が出来ます。 上の関数では、2つの数値を足し算して、計算結果を返しています。

グローバル変数とローカル変数について

文字列や数値を入れておける変数ですが、利用できる有効範囲(スコープ)が存在します。

<?php $a = 'グローバル変数'; /* 文字列の結合 */ function add($b){ $a = 'ローカル変数'; return $a . $b; } echo add('と') . $a;

やっている事

・$a に文字列「グローバル変数」を代入 ・関数内で $a に文字列「ローカル変数」を代入 ・「.」でローカル変数 $a と引数として渡した文字列「と」を結合 ・関数の戻り値とグローバル変数 $a を結合して表示

同じ変数名 $a を使用しているため、関数内の文字列「ローカル変数」の代入で変数 $a の中身が 変更されそうですが、実行結果は「ローカル変数とグローバル変数」が表示されます。 関数の内側の変数はローカル変数となり、関数の外側の変数はグローバル変数となっています。 それぞれ有効範囲が異なるため、同じ変数名でも別のものになります。

グローバル変数を関数内で利用するには

<?php $a = 'グローバル変数'; /* 文字列の結合 */ function add($b){ global $a; return $a . $b; } echo add('と') . $a;

関数内でグローバル変数を使いたい場合は、global 変数名;で利用できます。 実行結果は「グローバル変数とグローバル変数」です。 ローカル変数を関数の外側で使いたい場合は、global 変数名;でグローバル変数宣言をしてから、 その変数に入力する方法があります。

<?php function set(){ $a = '変数'; global $c; $c = $a; return 'グローバル'; } echo set() . $c;

実行結果は「グローバル変数」と表示されます。関数内で定義したグローバル変数 $c に、 ローカル変数の値である文字列「変数」が代入されています。

配列と連想配列について

PHPプログラムの変数には、複数個の文字列や数値を入れることが出来る配列や連想配列が存在します。 変数名の規則に違いはありません。

<?php /* 配列を代入 */ $a = array('は','い','れ','つ'); /* PHP5.4以降では短縮可能 */ $a = ['は','い','れ','つ']; /* 連想配列を代入 */ $b = array('キー'=>'値','連想'=>'配列'); echo $a[1] . $b['キー'];

やっている事

・変数 $a に array() で作成した配列を代入 ・変数 $a に [] で作成した配列を代入 ・変数 $b に array() で作成した連想配列を代入 ・$a[1] で配列 $a から配列内の値を取り出し ・$b['キー'] で連想配列 $b から配列内の値を取り出し

配列には文字列や数値を複数個入れておくことが出来ます。 配列ではインデックス番号、連想配列ではキーとなる文字列で値を取り出します。 実行結果は「い値」が表示されます。配列のインデックスは0から始まり配列内の個数-1で終わります。

<?php $a = array('は','い','れ','つ'); /* 「はいれつ」が表示される */ echo $a[0] . $a[1] . $a[2] . $a[3]; /* 繰り返し処理 */ foreach($a as $value){ /* この部分は配列内の個数回だけ処理される */ echo $value; } /* 連想配列を代入 */ $b = array('キー'=>'値','連想'=>'配列'); /* 繰り返し処理 */ foreach($b as $key=>$value){ /* この部分は配列内の個数回だけ処理される */ echo $key .'の値は'. $value; }

やっている事

・foreach(){} で配列や連想配列から順番に値を取り出し ・配列では変数 $value に配列内の値が代入される ・連想配列では、変数 $key にキー、変数 $value に値が代入される

foreach() 内の as の後ろの変数名は任意の変数名が使えます。$key=>$value は、 $i=>$val や $k=>$v など自由に変更できます。

ブラウザからの入力を受け取る方法

Webプログラミングではブラウザからの入力を受け取る処理が基本となります。 PHPでは自動的に前処理が行われているため、ブラウザからの入力は変数内に入っているので、変数から取り出すだけです。

<?php /* エスケープ関数 */ function h($val){ return htmlspecialchars($val, ENT_QUOTES, 'UTF-8'); } /* $_GET入力を取得する処理 */ function gets(){ $in = ''; foreach($_GET as $name=>$value){ $in .= h($name).'='.h($value).'<br>'; } return $in; } echo gets();

上のプログラムは test.php?name1=value1 などへアクセスすることでデータの受渡しが出来ます。

やっている事

・変数 $in を文字列変数として用意 ・foreach(){} で連想配列を順番に処理 ・「.=」で現在の変数の末尾に文字列結合 ・関数 h() で入力をエスケープ処理

ブラウザからの入力は、主にURLからの入力とフォームなどからのPOST送信から受け取ることが出来ます。 URLからの入力、例えば test.php?a=1&b=2 などのURLへのアクセスがあった場合、連想配列「$_GET」に その入力情報が入っています。aやbがキーとなり、=以降の文字列が値となります。

Webプログラミングで行われるエスケープ処理(サニタイジング)は、主に入力データの中に存在する プログラムで使用している特定の文字を無効化する処理になります。今回はブラウザへ表示するため、 HTML言語のタグで使用する文字である<>などを別の文字列に変換しています。

連想配列はよく使うため、ここでもう一度確認します。 /* 配列の途中でも改行できます */ $a = array( 'A'=>'エー', 'B'=>'ビー' ); echo $a['A'];

例えば、上では「A」というキーで「エー」という値を取り出しています。

$_GET は「スーパーグローバル変数」と呼ばれるもので、関数内でも利用できる定義済みの変数で、連想配列です。

http://example.com/test.php?name1=value1&name2=value2 例えば、上のURLへアクセスがあった場合、$_GET は下の連想配列になっています。 array( 'name1'=>'value1', 'name2'=>'value2' );

「スーパーグローバル変数」は他にもあり、いずれも連想配列で自動的に値が入力されています。

スーパーグローバル変数

$_GET は、URLから渡された値 $_POST は、主にフォームなどからPOST送信されたもの $_SERVER は、そのアクセス時のサーバやユーザー情報 $_COOKIE は、ブラウザから送られてきたクッキー情報 $_FILES は、ファイルアップロード時のファイル情報 $_SESSION は、そのアクセス時のセッション情報

※$_SESSION は session_start(); 関数を呼び出した後でのみ利用できます