PHPの算術演算子、インクリメント/デクリメント&whileを使ったループ処理/繰り返し文Web業界で働くためのPHP入門(6)(1/2 ページ)

オープンソースのWeb開発向けスクリプト言語「PHP」の文法を一から学ぶための入門連載。今回は、PHPの「算術演算子」、インクリメント/デクリメント演算子と、その前置/後置の違い、while文を使ったループ処理と、そのネストなどについて解説します【PHP 7.1含め2017年の情報に合うように更新】。

» 2017年06月12日 05時00分 公開

ループの基本はwhile文

 オープンソースのWeb開発向けスクリプト言語「PHP」の文法を一から学ぶための入門連載「Web業界で働くためのPHP入門」。今回はループ(繰り返し)処理について解説します。

 ループは連載第4回の「PHPの条件分岐、if、switch&比較演算子の使い方」で紹介した条件分岐と並ぶ制御構文の1つです。名前の通り、処理を繰り返すための仕組みです。

 特定の回数だけ繰り返し処理を行いたい場合をはじめ、前回のテーマである配列に格納したデータを処理するといったような、複数のデータを扱うときなど、ループはさまざまな場面で使われます。

 ループを実現するための構文は幾つかの種類がありますが、今回は基本的なwhile文を解説します。実際のところ全てのループはwhile文で書くことができます。他のループは、より読みやすく簡潔に記述するためのものです。これはif文とswitch文のときも同じでした。

 早速ループの解説に進みたいところですが、その前に、算術(計算)に関する演算子について解説します。加算などの算術演算は、ループを制御する目的で使う場合がよくあるためです。

PHPの算術演算子とは

 算数でもおなじみの、算術を行う演算子を「算術演算子」または「代数演算子」といいます。「算術」も「代数」も英単語「Arithmetic」の訳語で、訳者によって変わるのでしょう。

四則演算

 演算子については、これまでの連載で「代入演算子」「比較演算子」を解説しましたが、算術演算子もそのうちのひとつで、いわゆる「四則演算」の演算子です。

表1 四則演算の演算子
演算子 名前 意味
+ 加算 演算子の左右の値を足す
- 減算 演算子の左から右の値を引く
* 乗算 演算子の左右の値を掛ける
/ 除算 演算子の左を右の値で割る

 では、サンプルソースコードを見ていきましょう。

<?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>");
リスト1 phplesson/chap06/arithmeticOperators.php

 実行結果は以下の通りです。

ans1=11
ans2=1
ans3=30
ans4=1.2

 【1】が加算、【2】が減算、【3】が乗算、【4】が除算です。

 数値には整数と小数がありますが、データ型にも整数型と小数型があります。表1にある四則演算では、整数型同士なら結果も整数型に、どちらかが小数型なら結果は小数型になります。ただし割り算については、整数型同士であっても割り切れない場合、小数型を返します。【4】がそれに該当します。

その他の算術演算子

 算術演算子には、前項で示した四則演算以外に以下の4個の演算子があります。

表2 四則演算以外の演算子
演算子 名前 意味
+ 同一 必要に応じて整数や小数に型変換する
- 負変換 値を負にする
% 剰余 余りを計算
** 累乗 累乗を計算

 使い方のサンプルは以下のようになります。

<?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>");
リスト2 phplesson/chap06/arithmeticOperators2.php

 実行結果は以下の通りです。

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);
リスト3 phplesson/chap06/assignmentOperator.php

 実行結果は以下の通りです。

num=350
num=355

 数学の感覚では【1】の処理に違和感を覚えるかもしれませんが、連載第3回の「PHPにおける変数への格納の仕方と代入演算子」で解説した通り、「=」は代入を意味します。まず右辺の「346 + 4」が計算されて「350」という数値を得ます。次に、その350を$numに代入しているのです。このように、自分自身の値を使った計算結果を、再度自分に代入することがプログラムでは可能ですし、よくあることです。

 これを簡潔かつ安全に表記するため、例えば加算であれば「+=」という演算子があります。それが【2】です。これを、代入演算子といいます。減算など、他の演算子についても同じように表記できます。この演算子が使える場合は積極的に使っていきましょう。

       1|2 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。