演算とは
変数を作成してプログラムでデータ加工や計算をすることを演算といいます。どのような演算をするかを決めるための記号を演算子といい、データ型に応じて違います。また演算子でない方を 被演算子(オペランド) といいます。
数値の計算
「1 + 2」では「1」「2」がオペランド、「+」が演算子です。
1 + 2;
演算子
演算子の種類は「 + 」「 - 」「 * 」「 / 」「 % 」があります。
オペランド | 処理 | 演算 | 結果 |
---|---|---|---|
+ | 足し算 | 3 + 2 | 5 |
- | 引き算 | 3 - 2 | 1 |
* | 掛け算 | 3 * 2 | 6 |
/ | 割り算 | 3 / 2 | 1.5 |
% | 余り | 3 % 2 | 1 |
二項演算
二項演算は四則演算(加減乗除)などで2つの値から新たな値を作成することをいいます。 プログラムでは変数や値が 2つ登場する演算のことをいいます。
数値の二項演算
変数「answer」を定義して「1 + 2」を代入します。
$answer = 1 + 2;
プログラムは右辺から処理(再代入)
プログラム処理は右辺から処理するルールになっています。次の例は、右辺の「$price + 30」(130 + 30)を処理してから、左辺の「$price」に再代入します。
$price = 130;
//右辺を計算(130 + 30)をしてから、左辺の $price に再代入
$price = $price + 30;
複合演算を使う
いろいろな四則演算
四則演算の複合演算を使って、変数を確かめてみましょう。
<?php
$price = 130;
$price = $price + 30;
$price = $price - 50;
$price = $price * 3;
$price = $price / 2;
?>
HTML表示
変数「$price」をHTMLに表示してみましょう。
<?php
$price = 130;
$price = $price + 30;
$price = $price - 50;
$price = $price * 3;
$price = $price / 2;
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h2>価格</h2>
<p><?= $price ?>円</p>
</body>
</html>
結果
165円
文字列型変数の連結
文字列に変換される
文字列と変数は、.(ピリオド) で連結しますが、変数が数値でも文字列に変換されます。
$item_name = "コーヒー";
$message = $item_name . "の価格は" . $price . "円です。";
リテラル式
リテラル式で記述すると以下のようになります。
$item_name = "コーヒー";
$message = '{$item_name}の価格は{$price}円です。';
HTMLで表示
HTMLにそれぞれの変数を表示してみましょう。
<h2>購入</h2>
<p><?= $item_name ?></p>
<p><?= $price ?>円</p>
<p><?= $message ?></p>
シングルクォーテーション「 ' 」は注意が必要
「 ' 」(シングルクォーテーション)で変数を囲んでしまうと、記述したまま表示されるので注意しましょう。
$message = '{$item_name}の価格は{$price}円です。';
HTMLの結果
{$item_name}の価格は{$price}円です。
複合演算
複合演算は二項演算の計算を省略して書くことができます。「 = 」の前に演算子を記述して値を代入します。
二項演算
$price = 130;
$price = $price + 30;
$price = $price - 50;
$price = $price * 3;
$price = $price / 2;
複合演算
$price = 130;
$price += 30;
$price -= 50;
$price *= 3;
$price /= 2;
文字列の ' と " の使い方に正解はなく、ケースバイケースで使い分けましょう。
文字列の複合演算
文字列でも複合演算 .= で連結できます。
$message .= '購入しますか?';
単項演算
単項演算は1つの変数に対して演算処理し、その結果を変数に再代入します。
演算子 | 処理 | 演算 | 結果 |
---|---|---|---|
++ | インクリメント | 変数++ | 変数を1増加 |
-- | デクリメント | 変数-- | 変数を1減少 |
単項演算の例
$amount = 1;
// $amount に 1 足した結果を $amount に代入
$amount++;
// $amount から 1 引いた結果を $amount に代入
$amount--;
HTML部分
HTMLに $amount を表示してみましょう。
<h3>個数</h3>
<p><?= $amount ?>個</p>
論理演算
論理演算は、比較演算子で左の値と右の値を比較します。結果は論理型(bool型)で左辺に代入できます。
// 結果は true か false
結果 = (値1 比較演算子 値2);
比較演算子
比較演算子は左の値と右の値を比較して、bool型(trueかfalse)を判定し、条件式の分岐で利用します。下の表は比較演算子で一致すれば true を返します。
比較演算子 | 処理 | 判別 |
---|---|---|
== | A == B | A と B が等しい |
!= | A != B | A と B が等しくない |
> | A > B | A が B より大きい |
< | A < B | A が B より小さい |
>= | A >= B | A が B 以上 |
<= | A <= B | A が B 以下 |
=== | A === B | A と B が等しい(データ型も含む) |
!== | A !== B | A と B が等しくない(データ型も含む) |
$is_bool = (値1 比較演算子 値2);
論理演算の例1
$hp = 10;
// 左項と右項が等しいか
$is_equal = ($hp == 20);
var_dump($is_equal);
// 左項が右項より小さいか
$is_under = ($hp < 20);
var_dump($is_under);
// 左項が右項より大きいか
$is_over = ($hp > 10);
var_dump($is_over);
//左項が右項以上か
$is_over = ($hp >= 10);
var_dump($is_over);
結果
bool(false)
bool(true)
bool(false)
bool(true)
同値
データ型と値が同じことを同値といい、同値の演算子は === です。 また、同値でない演算子は !== で記述します。PHPでは、"20" (string 型) は 20 (int 型) として自動処理するため、意図しないバグが発生する可能性があるので注意しましょう。
$a = "20";
$b = 20;
$is_equal = ($a == $b);
var_dump($is_equal);
// === は左項と右項が同値(型と値が同じ)か
$is_equal = ($a === $b);
var_dump($is_equal);
// !== は左項と右項が同値でないか
$is_equal = ($a !== $b);
var_dump($is_not_equal);
結果
bool(true)
bool(false)
bool(true)
三項演算
三項演算は比較演算の結果で分岐して代入します。三項演算は「 ? 」と 「 : 」 で記述します。
値 = (true or false) ? true のときの値 : false のときの値
三項演算は最初は難しいですが、理解できると、のちに学習する if や switch など使わずに処理できます。
三項演算の例
$price = 150;
$money = 200;
$message = ($money >= $price) ? '購入できます' : '購入できません';
echo $message;
Null合体演算
Null合体演算 は、チェック値があればその値、NULLの場合、??** の後の値が返ります。
値 = (チェック値) ?? 初期値
Null合体演算の例
$display_name = ($user_name) ?? '匿名';
echo $display_name;
$user_name = '東京 太郎';
$display_name = ($user_name) ?? '匿名';
echo $display_name;
結果
匿名
東京 太郎
エルビス演算子
エルビス演算子は、Null合体演算と似ていますが、チェック値がNULL以外に 「0」や「false」のときも空判定されます。
値 = (チェック値) ?: 空でない場合の値
エルビス演算子の例
$price = 0;
$result = ($price) ?: 'Empty';
echo $result;
$price = 100;
$result = ($price) ?: 'Empty';
echo $result;
結果
Empty
100
演習
問題1
以下の変数を使って「コーヒーの価格は120円です。」と文字列で表示してみましょう。
$item = 'コーヒー';
$price = 120;
問題2
以下の計算で、$hp がいくつになるか確認してみましょう。
$hp = 5;
$hp++;
$hp -= 4;
$hp *= 4;
$hp /= 2;
問題3
- ミネラルウォーター:88円 x 5個
- コーヒー:120円 x 3個
- 割引:10%
の合計金額を計算してみましょう。
問題4
全教科の平均点を変数で計算してみましょう。
- 国語:76点
- 数学:83点
- 理科:69点
- 社会:91点
問題5
++$number と $number++ の違いを調べてみましょう。
$number = 10;
echo ++$number;
$number = 10;
echo $number++;