式と演算子

式(expression)

PHPの式の多くは、

を組み合わせてつくられています。

式の評価
  • 式の計算が、式の評価にあたります
  • 評価された結果を「式の値」と呼びます
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>複数の変数</title>
</head>
<body>
<?php
  $product = '消しゴム';
  $num = 10;
  print $product . '' . $num . '個販売しています。' . "\n";
?>
</body>
</html> 
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>変数を演算する</title>
<style>
table {
  width: 300px;
  border-collapse: collapse;
}
th {
  background-color: #CCC;
}
th,td {
  padding: 6px;
  text-align: center;
}
</style>
</head>
<body>
<?php
$product = '消しゴム';
$num = 10;
$price = 50;

$total = $price * $num; //$numと$priceの値をかけ合わせたものを$totalに代入します
$total = $total - 100; //$totalから100減じたものを$totalに代入します
?>
<table border="1">
<tr><th>内容</th><th>金額</th></tr>
<?php
 print '<tr><td>品名</td><td>' . $product . '</td></tr>' . "\n";
 print '<tr><td>単価</td><td>' . $price . '円</td></tr>' . "\n";
 print '<tr><td>個数</td><td>' . $num . '個</td></tr>' . "\n";
 print '<tr><td>計</td><td>' . $total . '円(但100円引)</td></tr>' . "\n";
?>
</table>
</body>
</html> 


《実行結果》

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>変数を計算する</title>
</head>
<body>
<?php
  $x = 10;
  $y = 5;
  print $x . '' . $y . '' . ($x + $y) . '<br>';
  print $x . '×' . $y . '' . ($x * $y) . "\n";
?>
</body>
</html>


《実行結果》


演算子

  • 簡単な計算をしたり長い文字列をつなぎ合わせる
文字列の中に数値を入れて表示
  • 300円の表品を10個購入して500円割引される場合
  • 「300 x 10 - 500」円
<?php
  print '合計金額は、300 x 10 - 500 円です。';
?>


四則演算の部分は、プログラミングとして記述するように変更します。

算術演算子で「四則演算」や「変数の結合」
<?php
  $tanka = 300;
  $suryo = 10;
  $waribiki = 500;
  $total = $tanka * $suryo - $waribiki;
  print $total;
?>
文字列結合演算子
<?php
  $tanka = 300;
  $suryo = 10;
  $waribiki = 500;
  $total = $tanka * $suryo - $waribiki;
  print '合計金額は、' . $total .  '円です。';
?>


結合代入演算子
  • 変数の後に新たな文字列を継ぎ足しできる演算子
<?php
  $temp = '山本さん、';
  $temp = $temp . 'こんにちは。';
  $temp = $temp . '今日は月曜日です。';
  print $temp;
?>


「結合代入演算子」を使って書き換えます。

<?php
  $temp = '山本さん、';
  $temp .=  'こんにちは。';
  $temp .=  '今日は月曜日です。';
  print $temp;
?>


演算子の種類


記号 名前 記号 名前
+ 加算 == 等価
- 減算 === 等価
* 乗算 != 非等価
/ 除算 <> 非等価
% 剰余 !=== 非等価
+ 単項+ ! 論理否定
- 単項- && 論理積
~ 補数 || 論理和
& ビット論理積 and 論理積
| ビット論理和 or 論理和
^ ビット排他的論理和 xor 排他的論理和
= 代入 , 順次
<< 左シフト () 関数呼び出し
>> 右シフト () キャスト
++ インクリメント [] 配列添え字
-- デクリメント @ エラー制御
> より大きい -> メンバ参照
>= 以上 ? : 条件
< 未満 new オブジェクト作成
<= 以下 instanceof オブジェクトのクラス

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>いろいろな演算子を利用する</title>
<style>
table {
  width: 300px;
  border-collapse: collapse;
}
th {
  background-color: #CCC;
}
th,td {
  padding: 6px;
  text-align: center;
}
</style>
</head>
<body>
<?php
 $num1 = 10;
 $num2 = 5;
 $num3 = $num1+$num2;
 $num4 = $num1-$num2;
 $num5 = $num1*$num2;
 $num6 = $num1/$num2;
 $num7 = $num1%$num2;
?>
<table border="2">
<tr><th>項目</th><th>結果</th></tr>
<?php
 print '<tr><td>$num1</td><td>' . $num1 . '</td></tr>' . "\n";
 print '<tr><td>$num2</td><td>' . $num2 . '</td></tr>' . "\n";
 print '<tr><td>$num1 + $num2</td><td>' . $num3 . '</td></tr>' . "\n";
 print '<tr><td>$num1 - $num2</td><td>' . $num4 . '</td></tr>' . "\n";
 print '<tr><td>$num1 * $num2</td><td>' . $num5 . '</td></tr>' . "\n";
 print '<tr><td>$num1 / $num2</td><td>' . $num6 . '</td></tr>' . "\n";
 print '<tr><td>$num1 % $num2</td><td>' . $num7 . '</td></tr>' . "\n";
?>
</table>
</body>
</html> 


《実行結果》


インクリメント・デクリメント

  • 「++」演算子は、インクリメント演算子(increment operator)と呼ばれます。
  • 「--」演算子は、デクリメント演算子(decrement operator)と呼ばれます。
  • 何らかの処理を1つずつ値を増やしたり減らしたりの繰り返しを1回ずつカウントするために用いられます。
変数$aの値を1増やします
$a++;
値を1増やす演算は、このようにも書けます
$a = $a + 1;
変数$aの値を1減らします
$a--;
値を1減らす演算は、このようにも書けます
$a = $a - 1;

代入演算子(assignment operator)

  • 左辺の変数に右辺の値を代入する


記号 名前
+= 加算代入
-= 減算代入
*= 乗算代入
/= 除算代入
%= 剰余代入
$= 論理積代入
^= 排他的
|= 論理和代入
<<= 左シフト代入
>>= 右シフト代入

$a+$bの値を$aに代入

$a += $b;

文字列の連結

  • 「ドット」は、文字列連結演算子と呼びます。
  • 変数を連結するだけの場合は、{ }は不要です。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>文字列の連結</title>
</head>
<body>
<table border="1">
<tr><th>文字列</th></tr>
<?php
  $msg1 = 'こんにちは';
  $msg2 = 'さようなら'; 
  $msg3 = 'またあした';

  print '<tr><td>' . $msg1 . $msg2 . '</td></tr>' . "\n";
  print '<tr><td>' . $msg2 . $msg3 . '</td></tr>' . "\n";
  print '<tr><td>' . $msg1 . $msg3 . '</td></tr>' . "\n";
?>
</table>
</body>
</html>

演算子の優先順位

  • 通常の四則演算と同じです。
  • カッコ内が先に評価されます。
左結合(left associative)
($a + $b) + 1
右結合(right associative)
$a = ($b = 1)

ビットとバイ

1ビット
  • コンピュータは、0と1を使った2進数で数を認識しています。
  • 2進数の値の「1桁分」は、コンピュータの数値であらわすときの単位で「ビット(bit)」と呼ばれています。
バイト(8ビット)
  • 1ビットの数値では、2進数の1桁分である「0」か「1」のどちらかの値をあらわすことができます。
  • 2進数の8桁の数値は「バイト(byte)」という単位であらわします。
  • バイトは8ビット

まとめ