演算とは

変数を作成してプログラムでデータ加工や計算をすることを演算といいます。どのような演算をするかを決めるための記号を演算子といい、データ型に応じて違います。また演算子でない方を 被演算子(オペランド) といいます。

数値の計算

「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++;

PHP超入門