文法2 - PHP入門
目次
- PHP入門
- PHPの概要
- PHP環境のインストール(XAMPP)・PHPの設定
- PHPの基本・簡単なプログラム
- 文法1
- 文法2
- 様々な関数を使う
- フォームの基本
- システム作成
- オブジェクト指向
- データベースとSQL
- PHPでMySQLを使う
- ブログを作る
- ECサイト(ショッピングサイト)を作る
このページの内容
はじめに
この章ではさらに詳しくPHPの文法を解説します。「文字列を使う際の詳細な注意点」「配列」「連想配列」「ループ(while, for, foreach)」について説明し、ループと配列を組み合わせて実践的なプログラムを作成して行きます。文字列詳細
文字列は、シングルクォートで囲む方法とダブルクォートで囲む方法の2通りがありますが、その違いをサンプルプログラムで説明します。str1.php
<?php
$str = "山田";
echo '<br>こんにちは{$str}さん\n';
echo "<br>こんにちは{$str}さん\n";
?>
このソースでは、同じ文字列をシングルクォートとダブルクォートで囲んでいます。シングルクォートで囲んだ文字列はほとんどそのまま表示されますが、ダブルクォートで囲んだ文字列は「変数展開」や「エスケープシーケンスの解釈」が行われます。
変数展開とは
変数展開とは、文字列中に変数名を書くと、その変数の中身が展開されて表示されることです。変数とその他の文字列の区切りが分からなくなる場合は中括弧で変数を囲みます。判断が面倒な場合は必ず中括弧で囲むようにしても良いでしょう。エスケープシーケンスとは
エスケープシーケンスとは、そのままでは表示できない特殊文字を表します。よく使われるエスケープシーケンスには以下のようなものがあります。エスケープシーケンス | 意味 |
---|---|
\n | 改行 |
\t | タブ |
\" | ダブルクォート文字 |
\' | シングルクォート文字 |
\\ | 「\」文字 |
複数のPHPタグ
PHPタグ(<?php ~ ?>)の組み合わせは、ひとつのソースファイル内にいくつも書けます。一度PHPタグを閉じても変数の値は保持されるので、以下のプログラムのように最初に変数を定義して、後でHTML文書中に値を埋め込んで使うこともよく行われます。str2.php
<?php
$s1 = "山田";
$s2 = "鈴木";
?>
こんにちは<?php echo $s1 ?>さん。<br>
こんばんは<?php echo $s2 ?>さん。<br>
PHPの閉じタグ「?>」の直前の文の最後のセミコロンは、省略しても構いません。なので「<?php echo $s1 ?>」の$s1の直後にセミコロンがないのです。配列
配列とは
前章で「変数とは値を持ち運ぶ箱みたいなものです」と説明しました。配列とは変数が沢山集まったもの、つまり沢山の箱です。配列は後述する「ループ」と組み合わせて使うと真価を発揮します。配列の構文
配列を作成するときの構文を示します。
配列変数名 = array(値1, 値2, 値3, ...);
配列変数は基本的に通常の変数と同じですが、値を取り出すときは、箱の番号を大括弧で指定します。この番号のことを「添字」と言います。添字は0から始まるので注意してください。例えば$kemonoの3番目の要素を取り出すならば、$kemono[2]と指定する必要があります。
配列のサンプルプログラム
配列を使ったサンプルプログラムを示します。array1.php
<?php
$kemono = array("犬", "猫", "猿", "豚");
echo "配列の1番目は";
echo $kemono[0];
echo "です。<br>";
echo "配列の3番目は{$kemono[2]}です。<br>";
?>
配列のサンプルプログラムの解説
$kemono = array("犬", "猫", "猿", "豚");
「犬」「猫」「猿」「豚」の4つの文字列の入った配列が$kemonoという名前で作られます。
echo $kemono[0];
$kemono[0]は配列の1番目の値、すなわち「犬」を取り出します。
echo "配列の3番目は{$kemono[2]}です。<br>";
配列の3番目の値である「猿」を取り出し、文字列に埋め込んで表示しています。連想配列
配列の添字は、数字だけではなく文字列も使うことができます。これを「連想配列」と言います。配列を作成するときに、添字を書いて「=>」記号を付け、その後に添字に対応する値を書きます。連想配列の場合、添字のことを特別に「キー」と言う場合もあります。値を引っ張り出す鍵、というわけです。連想配列のサンプルプログラム
以下に連想配列のサンプルプログラムを示します。array2.php
<?php
$kemono = array("犬" => "ワン", "猫" => "ニャー",
"猿" => "ウッキー", "豚" => "ブヒィ");
echo "猫の鳴き声は{$kemono["猫"]}です。<br>";
echo "豚の鳴き声は{$kemono["豚"]}です。<br>";
?>
連想配列のサンプルプログラムの解説
このプログラムは、キーが「犬」「猫」「猿」「豚」で、それに対応する値がそれぞれの動物の鳴き声になっています。$kemono["猫"」で「ニャー」の値、$kemono["豚"]で「ブヒィ」の値が取れるわけです。while文
ウェブアプリケーションにおいて、ショッピングサイトの商品一覧画面など、同じような表示を繰り返す場面はよくあります。そのようなとき「while」文を使うと、繰り返し(ループ)をスマートに記述できます。whileの構文は以下の通りです。
while (条件式) {
条件式がTRUEのときの処理
}
if文と似ていますが、while文は条件式がFALSEにならない限り処理を繰り返します。while文のサンプルプログラム1
whileによる繰り返しを使って1~10までの整数を表示します。while1.php
<?php
$i = 1;
while ($i <= 10) {
echo "$i ";
$i++;
}
?>
while文のサンプルプログラム1の解説
まず変数$iに1を代入し、次にwhile文の条件で$iが10以下の間、while文の中身を実行します。while文の中身は、まず現在の$iの値を出力し、$iの値を1増やしています。whileを使うときは、かならずいつか条件式がFALSEになるようにしなければいけません。さもないと永久ループになり、ブラウザがクラッシュする恐れがあります。
while文のサンプルプログラム2
リロードするたびに異なる長さのバーを表示するプログラムを示します。while2.php
<?php
while (rand(1, 10) != 1) {
echo "■";
}
?>
while文のサンプルプログラム2の解説
1~10の乱数が1以外のとき、すなわち9/10の確率で四角がひとつ表示されます。1/10の確率でループを抜けます。for文
for文も繰り返し(ループ)を作ります。構文を以下に示します。
for (式1; 式2; 式3) {
式2がTRUEのときの処理
}
式1は一番最初に無条件に実行されます。そして式2を見てTRUEなら中身の処理が実行されます。ループが終わって戻ってくるごとに式3が実行され、式2がチェックされ…の繰り返しです。for文のサンプルプログラム1
while文のサンプルプログラム1をfor文を使って書き直してみましょう。for1.php
<?php
for ($i = 1; $i <= 10; $i++) {
echo "$i ";
}
?>
for文のサンプルプログラム1の解説
まず最初に「$i = 1(式1)」が実行されます。次に「$i <= 10(式2)」が評価されTRUEなので中括弧の中のecho文が実行されます。次に「$i++(式3)」が実行され、$iが2になります。そして再度「$i <= 10(式2)」が評価され、まだTRUEなのでecho文が実行され…、と式2がFALSEになるまで($iが11になるまで)繰り返されます。for文のサンプルプログラム2
もう少し、for文の練習をしましょう。以下のプログラムは、10から数を減らして行って、0まで偶数を表示します。for2.php
<?php
for ($i = 10; $i >= 0; $i -= 2) {
echo "$i ";
}
?>
for文のサンプルプログラム2の解説
式1で$iに10を代入しているので10から表示されます。式2により$iが0以上の間表示されます。式3で$iを2ずつ減らしています。「A -= B」という式は「Aの値をBだけ減らす」という意味で、「複合演算子」と言います。
for文のネスト
for文の繰り返される部分にはあらゆる文を書けるので、for文自体も書けます。for文の中にfor文を書くことを、「ネスト(入れ子)」と言います。以下のプログラムは、ネストされたfor文によって九九の表を表示します。
for3.php
<?php
for ($y = 1; $y <= 9; $y++) {
for ($x = 1; $x <= 9; $x++) {
printf("%02d ", $x * $y);
}
echo "<br>";
}
?>
九九プログラムの解説
外側のループで$yが1から9までループしますが、そのループ1回ごとに内側のループで$xが1から9までループします。つまり全部で9×9の81回ループします。内側のループ内のecho文で$xと$yを掛けた結果を、内側のループを抜けた直後に<br>を出力して改行しています。printf関数は値をフォーマットしてフォーマットされた結果の文字列を出力します。「%02d」の部分は、「d」は数値で、「02」は2桁で足りない分は左に0を追加するという意味をあらわします。直接$x * $yの結果を出力すると一桁と二桁の数値が混在して表が揃わないので、この関数によって二桁に統一しているのです。
配列の繰り返し処理
配列は、while文やfor文と組み合わせて、要素をひとつずつ取り出しながらループして処理するパターンが多いです。配列の繰り返し処理のサンプルプログラム
配列の内容をfor文でループしてHTMLのテーブルとして整形して出力します。for4.php
<table border="1">
<tr><th>アイテム一覧</th></tr>
<?php
$items = array(
"棍棒", "銅の短剣", "炎の剣",
"聖なる盾", "破邪の兜", "勇者の鎧"
);
for ($i = 0; $i < count($items); $i++) {
echo "<tr><td>{$items[$i]}</td></tr>";
}
?>
</table>
配列の繰り返し処理のサンプルプログラムの解説
for文によって$iを0から5まで増加させながらループしています。count関数は引数で指定した配列の要素数を返します。「$i < count($items)」は、上のプログラムの場合「$i < 6」と書くのと同じですが、配列の要素数が増減しても「count($items)」の部分は変更しなくてもよいというメリットがあります。$items[$i]に配列の要素が順番に入るので、その値をテーブルタグで出力しています。
foreach文
配列から要素をひとつずつ取り出して処理する場合、for文よりもforeach文のほうがシンプルに書ける場合があります。foreachの構文を以下に示します。
foreach (配列変数 as ループ変数) {
処理
}
配列の要素をひとつずつループ変数に代入しながら最後の要素になるまでループの処理を行います。foreach文のサンプルプログラム1
foreach1.php
<?php
$nums = array(5, 120, 134, 46);
foreach ($nums as $n) {
echo "$n ";
}
?>
foreach文のサンプルプログラム1の解説
まず4つの数値からなる配列$numsを定義します。次にforeach文によって$numsの要素をひとつずつ取り出して$nに格納して出力しています。1回目のループ | $n ← $nums[0] |
2回目のループ | $n ← $nums[1] |
3回目のループ | $n ← $nums[2] |
4回目のループ | $n ← $nums[3] |
foreach文のサンプルプログラム2
次に「for4.php」をforeach文を使って書き直してみましょう。foreach2.php
<table border="1">
<tr><th>アイテム一覧</th></tr>
<?php
$items = array(
"棍棒", "銅の短剣", "炎の剣",
"聖なる盾", "破邪の兜", "勇者の鎧"
);
foreach ($items as $i) {
echo "<tr><td>$i</td></tr>";
}
?>
</table>
foreach文のサンプルプログラム2の解説
for4.phpと比較すると、ループの部分がかなりスッキリとしていることが分かります。foreach文(連想配列)
foreachにはもうひとつ構文があります。
foreach (配列変数 as キー => 値) {
処理
}
これは連想配列に使うもので、配列のキー(添字)と値を同時に取り出してくれます。foreach文(連想配列)のサンプルプログラム
この構文を使ったサンプルプログラムを作ってみましょう。foreach3.php
<table border="1">
<tr><th>アイテム名</th><th>売値</th></tr>
<?php
$items = array(
"棍棒" => 50,
"銅の短剣" => 150,
"炎の剣" => 1000
);
foreach ($items as $k => $v) {
echo "<tr><td>$k</td><td>$v G</td></tr>";
}
?>
</table>