| ||
| ||
| ||
| ||
| ||
|
ポイント5
加算/減算子は変数の前後で意味が違う
ここでPHPで扱う演算子について整理しておきましょう(表2[拡大表示])。算術演算子は見ての通り,四則演算を行うためのものです。比較演算子は,主に変数の値を比較するために使うもので,値と型を同時に比較する演算子===と!==は,PHP4から追加されたものです。
論理演算子でよく使うのはand,or,!の三つでしょう。排他的論理和(xor)は,a xor bと書いたとき,a,bのどちらか一方だけが真の場合に真になります。&&はandと,||はorとそれぞれ同じですが,複数個の演算子を並べた場合に,and,orより演算子の優先度が高いという違いがあります。
間違えやすいのが加算子++と減算子--です。この二つの演算子は,変数に前置するか(前置演算子),後置するか(後置演算子)によって演算のタイミングが異なるのです。例えば,
$a=1;
print($a++);
print(++$a);
と書いたとき,最初のprint文では1が,次のprint文では3が出力されます。後置では$aを返した後,1を加算しますが,前置では1を加算した後,$aを返すからです。
ポイント6
PHPの制御文とHTMLタグは入れ子にできる
制御文は,プログラムの分岐や繰り返しをコントロールします。分岐には,if文とswitch文があります。行こうかやめようか判断する時や,道が二またに分かれているような時はif文を,たくさんに道が分かれている時はswitch文を使います。
まずはif文の使い方を見てみましょう。リスト6[拡大表示]の(a)は,最も単純なif文のサンプルです。変数$signalの値がblueなら,if文の( )の中が真(TRUE)となって,{ }の中の処理を行います。カッコや中カッコの後ろに,;(セミコロン)が必要ない点に注意してください。
(b)はif ~ elseの例です。$yajirushiの値がleftでなければ,「右へ」という文字列を出力します。
この二つだけならC言語とほとんど同じですが,PHPならではの表記が(c)です。これは(a)とまったく同じ処理です。PHPスクリプトはリスト1[拡大表示]で紹介したようにHTMLタグと一緒に記述できるので,HTMLタグを入れ子にすることが可能なのです。ただし注意してほしいことが二つ。最初のif文の終端に,:(コロン)がある点と,if文の終わりであることを示すために,最後にendifを付ける点です。endifの終端が;(セミコロン)になっている点も気をつけてください。
次はswitch文です。リスト7[拡大表示]は,変数$tokeiの値によって処理が分岐していることがわかりますね。default文は,該当する値がない場合に実行させたい処理を記述します。ポイントは,それぞれのcaseの終端がコロンで終わること,そしてcase処理の内部に必ずbreak文を記述することです。break文がないと,case処理は順番に実行されます。例えば$tokeiの値が「ね」だった場合,「0時の方向へ」「3時の方向へ」…とすべての処理を実行してしまいます。
if文,switch文の分岐処理に対して,同じ処理を何度も行うのがwhile文,do ~ while文,for文の三つの繰り返し制御文です。ざっくり言いますと,条件が真の場合に処理を繰り返すのがwhile文,while文によく似ているものの,一回やってみてから条件を確かめるのがおっちょこちょいがdo ~ while文。律義に指定した回数繰り返すのがfor文です。
リスト8[拡大表示]は,(1)while文,(2)for文,(3)do ~ while文を使ったサンプルで,実行すると図4のようになります。注意すべきなのは(3)です。do ~ while文は後判断なので最低1回はdo以下の処理を実行します。したがってこの例では,$jの値が10以上であってもdo ~ while構文ではprint以降の処理が一度だけ実行されるというわけです。
■著者紹介 金宏和實(かねひろ・かずみ)氏
株式会社イーザー代表取締役副社長。富山県高岡市在住。