文法1 - PHP入門
目次
- PHP入門
- PHPの概要
- PHP環境のインストール(XAMPP)・PHPの設定
- PHPの基本・簡単なプログラム
- 文法1
- 文法2
- 様々な関数を使う
- フォームの基本
- システム作成
- オブジェクト指向
- データベースとSQL
- PHPでMySQLを使う
- ブログを作る
- ECサイト(ショッピングサイト)を作る
このページの内容
はじめに
この章と次の章で、PHPの文法を2回に分けて解説します。この章では、「値の種類」「変数」「演算子(算術・比較・代入・加算減算・結合)」「条件分岐(if, switch)」「関数の概要」について解説し、最後に前章で作成したおみくじプログラムを改良してみます。数値と文字列
ほとんどのプログラミング言語では「値」という言葉の定義を厳密に決めています。PHP で使われる値の種類には「数値」や「文字列」、その他(オブジェクト・真偽値など)があります。数値
数値はそのまま書きます。少数も使えます。数値の例
0
2
65536
4.3
150.4
文字列
文字列は文字がいくつか集まったものです。単語や文章も文字列になります。文字列はシングルクォートまたはダブルクォートで囲みます。文字列の例
"a"
'This is a pen'
'こんにちは!'
"さようなら"
型
値の種類を 「型」 と言います。数値は 「数値型」 、文字列は「文字列型」となります。変数
「変数」とは値を持ち運ぶ「箱」みたいなものです。プログラミングには必須の概念ですが、日常生活では出てこないものなので理解するまで時間がかかるかも知れません。しかし、いくつかPHPプログラムを作成すればすぐに納得できると思います。変数の命名規則
変数には名付けるときの規則があり、基本的に「1文字目は必ず『$』、2文字目はアルファベット大文字小文字またはアンダースコア、3文字目以降はアルファベット大文字小文字またはアンダースコアまたは数字」です。2文字目に数字が使えないことに注意してください。実は日本語も使えますが、混乱するので使わないほうが良いでしょう。正しい変数名の例を以下に示します。
$a
$x
$_look
$kyou_ha_ii_tenki
$japan29
正しくない変数名の例を以下に示します。
abc // 先頭が $ 文字ではない
$29japan // 2 文字目に数字がある
変数の役割
変数の主なはたらきは以下の3つです。- 値を入れる(代入)
- 値を取り出す
- 違う値に変える
変数を使ったサンプルプログラム1
以下のプログラムは、 変数に「値を入れる」と「値を取り出す」のサンプルです。var1.php
<?php
$a = "こんにちは<br>";
$b = 102;
echo $a;
echo $b;
?>
変数を使ったサンプルプログラム1の解説
$a = "こんにちは<br>";
「こんにちは<br>」という文字列を変数$aの箱に格納する、ということをしています。これを「代入」と言います。「=」は数学のイコールとは違い「代入演算子」といい、右辺の値を左辺の変数に格納するはたらきがあります。「=」は「←」と読み替えたほうが分かりやすいかも知れません。
$b = 102;
変数$bに数値の「102」を代入しています。
echo $a;
変数$aの値を「取り出して」出力しています。echo文のような命令のパラメータには、値そのものではなく、変数を指定することもできます。その場合は、変数に格納された値が出力されます。
echo $b;
変数$bの値を出力しています。変数を使ったサンプルプログラム2
以下のプログラムは、 変数に「値を入れる」と「違う値に変える」サンプルです。var2.php
<?php
$aisatsu = "こんにちは<br>";
echo $aisatsu;
$aisatsu = "こんばんは<br>";
echo $aisatsu;
?>
変数を使ったサンプルプログラム2の解説
$aisatsu = "こんにちは<br>";
echo $aisatsu;
変数$aisatsuに「こんにちは<br>」という文字列を代入し、echo文でそれを出力しています。
$aisatsu = "こんばんは<br>";
echo $aisatsu;
変数$aisatsuを「こんばんは<br>」という文字列で上書きしています。これによって元の「こんにちは<br>」という文字列は消えます。そしてecho文で上書きした文字列を出力しています。同じ「echo $aisatsu;」という文を2回書いていますが、変数の中身が変わっているので違う出力結果になるのです。算術演算子
PHPプログラムでは、値同士の計算をすることもよくあります。足し算には半角の「+」、引き算には半角の「-」、掛け算には半角の「*」、割り算には半角の「/」を使います。この記号のことを「演算子」と言います。四則演算の記号は、演算子の中でも「算術演算子」と呼ばれます。算術演算子のサンプルプログラム
以下のプログラムは四則演算をしてその結果を表示します。enzan1.php
<?php
echo "8 + 5 = ";
echo 8 + 5;
echo "<br>8 - 5 = ";
echo 8 - 5;
echo "<br>8 * 5 = ";
echo 8 * 5;
echo "<br>8 / 5 = ";
echo 8 / 5;
?>
算術演算子のサンプルプログラムの解説
echo命令などのパラメータには、ひとつの数値や文字列だけでなく、計算式を書くこともできます。その場合は計算式そのものではなく、計算結果がecho文にパラメータとして渡されます。その他の演算子
前にも登場しましたが「=」は「代入演算子」と言い、右辺の値を左辺の変数に代入します。「++」は加算子と言い、変数の値を+1します。「--」は減算子と言い、変数の値を-1します。「.」(ドット)は結合演算子と言い、文字列同士を連結します。その他の演算子のサンプルプログラム
enzan2.php
<?php
$num = 10;
$num++;
echo $num; echo "<br>";
$num--;
echo $num; echo "<br>";
$str = "こんにちは" . "お元気で";
echo $str
?>
その他の演算子のサンプルプログラムの解説
$num = 10;
まず変数$numに10が代入されます。
$num++;
echo $num; echo "<br>";
次に$numが+1され11になり表示されます。「echo $num;」の直後に改行なしで「echo "<br>";」と続いていますが、PHPでは改行は単語の区切り以上の意味を持ちませんので基本的に改行は全て省略することができます。ですがソースは見づらくなるので、省略はほどほどにしておきましょう。
$num--;
echo $num; echo "<br>";
次に$numが-1され10になり表示されます。
$str = "こんにちは" . "お元気で";
echo $str
変数$strに結合演算子によって文字列「こんにちは」と「お元気で」が連結された値が入り表示されます。if文
プログラムでは、ある条件のときのみ動作させたい処理を記述することがよくあります。そのようなとき、if文を使います。if文では後ろに括弧を置き、条件式を書きます。そしてその後ろに中括弧を置き、その中に条件式が正しいときに実行したい処理を書きます。この「正しい・間違い」というのはプログラムでは「真偽値」という値であらわし、正しいときは「TRUE」、間違いのときは「FALSE」という値を取ります。
if文の構文
if (条件式) {
条件式がTRUEのときの処理
}
if文のサンプルプログラム
if1.php
<?php
$num = 1;
if ($num == 1) {
echo "変数の値は1です。";
}
?>
if文のサンプルプログラムの解説
まず変数$numに1を代入します。続いてif文によって$numの値が1のときに後続の中括弧の中身であるecho文が実行されます。条件演算子「==」については後述します。ブラウザに「変数の値は1です。」と表示されるのを確認したら、次に①の「$num = 1;」を「$num = 2;」に変更して再度ブラウザで確認してみてください。
今度はif文の条件が正しくなくなる(FALSE)ので、何も表示されなくなります。
if~else文
if文のもうひとつの書き方として、中括弧に続いてelse文を続けることができます。else文の中括弧内には、条件式が間違い(FALSE)のときの処理を書きます。if~else文の構文
if (条件式) {
条件式がTRUEのときの処理
} else {
条件式がFALSEのときの処理
}
if~else文のサンプルプログラム
if2.php
<?php
$num = 1;
if ($num == 1) {
echo "変数の値は1です。";
} else {
echo "変数の値は1ではありません。";
}
?>
if~else文のサンプルプログラムの解説
最初の行の$numの値を変えて確認してみてください。$numが1のときif文の後続の中括弧が、それ以外のときelse文の後続の中括弧が実行されます。if~else if~…else文
さらに条件を細かくしたい場合は、if文に続いてelse if文を続けることもできます。else ifは複数続けることができます。if~else if~…else文の構文
if (条件式1) {
条件式1がTRUEのときの処理
} else if (条件式2) {
条件式1がFALSEで、なおかつ条件式2がTRUEのときの処理
} else {
条件式1がFALSEで、なおかつ条件式2もFALSEのときの処理
}
if~else if~…else文のサンプルプログラム
if3.php
<?php
$num = 1;
if ($num == 1) {
echo "変数の値は1です。";
} else if ($num == 2) {
echo "変数の値は2です。";
} else {
echo "変数の値は1と2以外です。";
}
?>
if~else if~…else文のサンプルプログラムの解説
最初の行の$numの値を変えて確認してみてください。$numが1のときif文の後続の中括弧が、$numが2のときelse if文の後続の中括弧が、それ以外のときelse文の後続の中括弧が実行されます。比較演算子
if文の条件式には、どんな式でも書くことができますが、普通は「比較演算子」を使った式を書くことが多いです。比較演算子はその名の通り、2つの値を比較する演算子です。主に以下の6つの演算子を使います。演算子 | 説明 |
---|---|
== | 左辺と右辺の値が等しいときTRUE |
!= | 左辺と右辺の値が異なるときTRUE |
< | 左辺が右辺より小さいときTRUE |
<= | 左辺が右辺以下のときTRUE |
> | 左辺が右辺より大きいときTRUE |
>= | 左辺が右辺以上のときTRUE |
比較演算子のサンプルプログラム
hikaku1.php
<?php
$n1 = 1;
$n2 = 1;
if ($n1 == $n2) {
echo '$n1と$n2は等しい<br>';
}
if ($n1 != $n2) {
echo '$n1と$n2は等しくない<br>';
}
if ($n1 < $n2) {
echo '$n1は$n2より小さい<br>';
}
if ($n1 <= $n2) {
echo '$n1は$n2以下<br>';
}
if ($n1 > $n2) {
echo '$n1は$n2より大きい<br>';
}
if ($n1 >= $n2) {
echo '$n1は$n2以上<br>';
}
?>
$n1と$n2の値をいろいろと変えて確認してみてください。$n1と$n2が等しいとき、$n1が$n2より小さいとき、$n1が$n2より大きいときでそれぞれ結果が変わります。ここでは文字列にシングルクォートを使っています。ダブルクォートを使うと変数の中身が出力されてしまうことがあるのでこのようにしています。
switch文
条件分岐をする構文はif文の他にswitch文があります。分岐の数が多いとき、if~else if~else if…と連ねて書くよりswitch文を使ったほうがスッキリと書ける場合があります。switch文に続いて分岐の判断に使う式を書き、その式の取りうる値の数だけcase句で分岐します。case句の処理が終わった後には必ずbreak文を書いてswitch文を抜けるようにします。default句は式の値がどのcaseの値でもないときに実行されます。default句は省略可能です。
switch (式) {
case 値1:
式の値が値1のときの処理
break;
case 値2:
式の値が値2のときの処理
break;
・・・
default:
式の値がcaseのどの値でもないときの処理
}
switch文のサンプルプログラム
以下のプログラムは、今日のラッキーアイテムを4つの中から1つランダムに表示するものです。switch1.php
<?php
echo "今日のラッキーアイテムは";
$r = rand(1, 4);
switch ($r) {
case 1:
echo "黄色いハンカチ";
break;
case 2:
echo "青いネクタイ";
break;
case 3:
echo "赤い帽子";
break;
case 4:
echo "白い靴";
break;
}
echo "です。";
?>
switch文のサンプルプログラムの解説
まず$rに1~4の乱数を代入し、switch文で$rの式に応じて分岐しています。このような単純な多数の分岐の場合は、if文よりもswitch文の方が向いています。関数の概要
「関数」とは、複数の文をまとめてひとかたまりの機能とし、名前を付けたものです。数学の関数と似ていますが、もう少し汎用的に使うことができます。関数の書式を以下に示します。
関数名(引数1, 引数2, 引数3,...)
「引数」は関数に渡すパラメータです。関数によって渡す数が決まっています。関数は実行した結果の値をひとつだけ「戻り値」として返すことができます(返さなくても構いません)。PHPのひとつのメリットとして、あらかじめ用意された数千もの関数があり、用途によって使い分けることができます。PHP Manualのサイトで全関数を参照できます。
関数の一例として、前章で登場したrand関数は乱数(ランダムな数)を戻り値として返す関数です。最初の引数に乱数の最小値、2番目の引数に乱数の最大値を渡します。
$num = rand(1, 5);
この文は、1以上5以下の乱数(すなわち1,2,3,4,5のどれか)を返し、$numに代入します。おみくじプログラムの改良
ここまで解説した機能を使い、前章で作成したおみくじプログラムを改良してみましょう。結果が大吉と凶しかないのではおみくじらしくないので、おみくじの種類を増やしてみます。omikuji2.php
<?php
$num = rand(0, 3);
if ($num == 0) {
echo "今日の運勢は大吉です。";
} else if ($num == 1) {
echo "今日の運勢は中吉です。";
} else if ($num == 2) {
echo "今日の運勢は小吉です。";
} else {
echo "今日の運勢は凶です。";
}
?>
このプログラムを実行すると、1/4の確率で「大吉」「中吉」「小吉」「凶」のいずれかが表示されます。rand関数によって0~3の乱数(すなわち0,1,2,3のいずれか)を$numに代入し、if文によって0なら大吉、1なら中吉、2なら小吉、その他すなわち3なら凶を表示しています。次に、それぞれ結果が出る確率を変えてみましょう。
omikuji3.php
<?php
$num = rand(0, 9);
if ($num <= 1) {
echo "今日の運勢は大吉です。";
} else if ($num <= 5) {
echo "今日の運勢は中吉です。";
} else if ($num <= 8) {
echo "今日の運勢は小吉です。";
} else {
echo "今日の運勢は凶です。";
}
?>
このプログラムは、大吉が2/10、中吉が4/10、小吉が3/10、凶が1/10の確率で出現します。0~9の10種類の数値をランダムに返し、0,1のとき大吉、2,3,4,5のとき中吉、6,7,8のとき小吉、9のとき凶を表示しているので、上記の確率になるのです。