オープンソースのWeb開発向けスクリプト言語「PHP」の文法を一から学ぶための入門連載。今回は、PHPの「算術演算子」、インクリメント/デクリメント演算子と、その前置/後置の違い、while文を使ったループ処理と、そのネストなどについて解説します【PHP 7.1含め2017年の情報に合うように更新】。
オープンソースのWeb開発向けスクリプト言語「PHP」の文法を一から学ぶための入門連載「Web業界で働くためのPHP入門」。今回はループ(繰り返し)処理について解説します。
ループは連載第4回の「PHPの条件分岐、if、switch&比較演算子の使い方」で紹介した条件分岐と並ぶ制御構文の1つです。名前の通り、処理を繰り返すための仕組みです。
特定の回数だけ繰り返し処理を行いたい場合をはじめ、前回のテーマである配列に格納したデータを処理するといったような、複数のデータを扱うときなど、ループはさまざまな場面で使われます。
ループを実現するための構文は幾つかの種類がありますが、今回は基本的なwhile文を解説します。実際のところ全てのループはwhile文で書くことができます。他のループは、より読みやすく簡潔に記述するためのものです。これはif文とswitch文のときも同じでした。
早速ループの解説に進みたいところですが、その前に、算術(計算)に関する演算子について解説します。加算などの算術演算は、ループを制御する目的で使う場合がよくあるためです。
算数でもおなじみの、算術を行う演算子を「算術演算子」または「代数演算子」といいます。「算術」も「代数」も英単語「Arithmetic」の訳語で、訳者によって変わるのでしょう。
演算子については、これまでの連載で「代入演算子」「比較演算子」を解説しましたが、算術演算子もそのうちのひとつで、いわゆる「四則演算」の演算子です。
演算子 | 名前 | 意味 |
---|---|---|
+ | 加算 | 演算子の左右の値を足す |
- | 減算 | 演算子の左から右の値を引く |
* | 乗算 | 演算子の左右の値を掛ける |
/ | 除算 | 演算子の左を右の値で割る |
では、サンプルソースコードを見ていきましょう。
<?php $num1 = 6; $num2 = 5; $ans1 = $num1 + $num2; // 【1】 $ans2 = $num1 - $num2; // 【2】 $ans3 = $num1 * $num2; // 【3】 $ans4 = $num1 / $num2; // 【4】 print("ans1=".$ans1."<br>"); print("ans2=".$ans2."<br>"); print("ans3=".$ans3."<br>"); print("ans4=".$ans4."<br>");
実行結果は以下の通りです。
ans1=11 ans2=1 ans3=30 ans4=1.2
【1】が加算、【2】が減算、【3】が乗算、【4】が除算です。
数値には整数と小数がありますが、データ型にも整数型と小数型があります。表1にある四則演算では、整数型同士なら結果も整数型に、どちらかが小数型なら結果は小数型になります。ただし割り算については、整数型同士であっても割り切れない場合、小数型を返します。【4】がそれに該当します。
算術演算子には、前項で示した四則演算以外に以下の4個の演算子があります。
演算子 | 名前 | 意味 |
---|---|---|
+ | 同一 | 必要に応じて整数や小数に型変換する |
- | 負変換 | 値を負にする |
% | 剰余 | 余りを計算 |
** | 累乗 | 累乗を計算 |
使い方のサンプルは以下のようになります。
<?php $str = "6"; $num1 = +$str; // 【1】 $num2 = 5; $ans1 = -$num1; // 【2】 $ans2 = $num1 % $num2; // 【3】 $ans3 = $num1 ** $num2; // 【4】 var_dump($num1); // 【5】 print("<br>ans1=".$ans1."<br>"); print("ans2=".$ans2."<br>"); print("ans3=".$ans3."<br>");
実行結果は以下の通りです。
int(6) ans1=-6 ans2=1 ans3=7776
同一と負変換は、加算や減算と同じ記号ですが使い方が違います。リスト2の【1】や【2】のように変数の前に置く演算子です。また、同一演算子はその機能が分かりにくいかもしれませんが、【1】とその変数内容を表示する【5】の結果を見てもらうと分かるように、文字列型の「6」が整数型(int)の「6」に変換されていることが分かるでしょう。
他の演算子に関しては、負変換の【2】、剰余の【3】、累乗の【4】は、それぞれ使われ方と実行結果を見てもらうと理解できるでしょう。
数学での四則演算では掛け算と割り算が優先されますが、PHPでも同様です。
$num = 1 + 2 * 3; // 結果は9ではなく7
これを演算子の優先順位といい、全ての演算子の間で順位付けされています。代入演算子や比較演算子も含まれ、できるだけ自然になるような順位になっています。詳細な優先順位は公式マニュアルを参照してください。
意図的に優先順位を上げたいときは、数学同様にかっこを使って優先順位を明示的に指定できます。
$num = (1 + 2) * 3; // 結果は9
次に、以下のサンプルを見てください。
<?php $num = 346; $num = $num + 4; // 【1】 print("num=".$num."<br>"); $num += 5; // 【2】 print("num=".$num);
実行結果は以下の通りです。
num=350 num=355
数学の感覚では【1】の処理に違和感を覚えるかもしれませんが、連載第3回の「PHPにおける変数への格納の仕方と代入演算子」で解説した通り、「=」は代入を意味します。まず右辺の「346 + 4」が計算されて「350」という数値を得ます。次に、その350を$numに代入しているのです。このように、自分自身の値を使った計算結果を、再度自分に代入することがプログラムでは可能ですし、よくあることです。
これを簡潔かつ安全に表記するため、例えば加算であれば「+=」という演算子があります。それが【2】です。これを、代入演算子といいます。減算など、他の演算子についても同じように表記できます。この演算子が使える場合は積極的に使っていきましょう。
Copyright © ITmedia, Inc. All Rights Reserved.