DESIGNMAP

  1. TOP
  2. プログラミング講座
  3. PHP
  4. 演算子 ー ゼロから始めるPHP入門(PHP7)【Vol.6】

演算子 ー ゼロから始めるPHP入門(PHP7)【Vol.6】

今回は基本となる演算子をまとめていきます。演算子はデータに対して処理をおこなう記号です。講座の中でもすでに代入演算子「=」が登場しました。

代数演算子

整数型や浮動小数点数型を計算するときに使う演算子です。

Atomを起動して、新規ファイルを作ります。「PHPの実行」で作った[php-study]フォルダ内に「sample6-1.php」として保存します。「PHPの実行」と同じようにHTMLのコードをAtomで生成させて、body要素内に以下のコードを書きます。Apacheを起動して、ChromeからPHPを実行してください。

※PHPの実行方法の詳しい手順は「PHPの実行」をご覧ください。これ以降のコードに関しても任意のファイル名で作成して、実際にPHPを実行しながら読む進めていってください。

<?php
echo 3 + 3;
echo ""<br>"";
echo 4 * 3;
echo ""<br>"";
echo 5 - 1;
echo ""<br>"";
echo 6 / 2;
echo ""<br>"";
echo 12 % 5;
echo ""<br>"";
echo 3 ** 3;
?>

実行結果:

6
12
4
3
2
27

*は掛け算、/は割り算、%は割った余りの数、**は累乗です。3 ** 3は3の3乗です。

足し算と掛け算が混ざった場合、掛け算が優先されて先に演算されます。

echo 3 + 3 * 6;

実行結果:

21

ただし上記のコードは、

echo 3 + (3 * 6);

と丸括弧を書いて優先順位を明確にすることがほとんどです。

代数演算子の暗黙の型変換

整数型や浮動小数点数型以外のデータ型に代数演算子を適用することができます。この場合、データ型は整数型や浮動小数点数型に型変換されて計算されます。

<?php
echo ""1"" + ""4"";
echo ""<br>"";
echo ""1"" + 3;
echo ""<br>"";
echo ""5abc"" + 3;
echo ""<br>"";
echo ""abc5"" + 3;
echo ""<br>"";
echo true + 1;
echo ""<br>"";
echo false + 1;
?>
5
4

Notice: A non well formed numeric value encountered in /Applications/XAMPP/xamppfiles/htdocs/php-study/sample6-1.php on line 13
8

Warning: A non-numeric value encountered in /Applications/XAMPP/xamppfiles/htdocs/php-study/sample6-1.php on line 15
3
2
1

2ヶ所注意・警告が出ています。
echo ""5abc"" + 3;""5abc""は5に変換されて計算されますが、Noticeエラーで出ています。「A non well formed numeric value encountered in」となっているので十分に数字に変換できない値に出会いましたという注意です。

""abc5"" + 3;""abc5""は0に変換されて計算されますが、Warningエラーで出ています。「A non-numeric value encountered in」となっているので、数字に変換できない値に出会いましたという警告です。

どちらも注意・警告を出しながらも、PHPは無理やり文字列型を整数型に型変換して計算しています。

true + 1;の論理型のtrueは1に変換され、falseは0に変換され計算されます。

PHPのエラーの場合、種類がいくつか分かれています。NoticeとWarningは警告を出すものの、スクリプトを停止せず今回のように何かしらの処理をしてくれます。必ず英文メッセージを読む習慣をつけてください。
文法エラーの場合、Parse errorとなりスクリプトは実行されません。他にも実行時エラーであるFatal errorがあります。これは実行が中断されます。

代入演算子

代入演算子は右側のデータを展開して、左側の変数に代入する演算子です。

<?php
$num = 5;
echo $num;
?>

実行結果:

5

この例の場合、右側の5は整数リテラルなので、これ以上展開はされ図、5のまま、左側の変数に代入されます。

$num = 5;
$num2 = $num;
echo $num2;

実行結果:

5

この場合、$num2 = $num;に注目してください。右側の$num変数は展開され、中身の5に置き替わります。そして展開された5が、左側の変数に代入されます。

比較演算子

比較演算子は、左右のデータを比較してtruefalseに置き換わる演算子です。

<?php
var_dump(5 === 5);
var_dump(5 === ""5"");
var_dump(5 == 5);
var_dump(5 == ""5"");
?>

実行結果:

bool(true) bool(false) bool(true) bool(true)

===は左右のデータ型が等しく、値も等しいときにtrueに置き換わる演算子です。5 === ""5""は、データ型が違うため、falseに置き換わっています。

==は左右の値が等しいときにtrueに置き換わる演算子です。暗黙で型変換をします。5 == ""5""の場合、右側の""5""5に変換され比較されます。

var_dump(5 == ""5abc"");
var_dump(0 == ""abc"");

実行結果:

bool(true) bool(true)

""5abc""5に変換され、""abc""0に変換され、どちらもtrueに置き替わります。

ただし==のバグの温床になりますので、まったく使わないようにしてください。

<?php
var_dump(5 !== 5);
var_dump(5 !== 6);
var_dump(5 !== ""5"");
var_dump(5 != ""5"");
?>

実行結果:

bool(false) bool(true) bool(true) bool(false)

!==はデータ型が等しくなく、値も等しくないときにtrueに置き替わります。!=は、値が等しくないときにtrueに置き替わります。!=は暗黙の型変換を行います。5 != ""5""""5""は、5に展開され、5 != 5となり、等しいのでfalseに置き替わります。

<?php
var_dump(5 < 5);
var_dump(5 < 6);
var_dump(5 > 6);
var_dump(5 <= 5);
var_dump(5 <> 3);
var_dump(5 <> 5);
?>

実行結果:

bool(false) bool(true) bool(false) bool(true) bool(true) bool(false)

<>は等しくないときに、trueに置き換わリます。!=と同じで暗黙の型変換をするので、注意が必要です。

宇宙船演算子

<?php
var_dump(5 <=> 5);
var_dump(6 <=> 5);
var_dump(5 <=> 6);
?>

実行結果:

int(0) int(1) int(-1)

$a <=> $bは、PHP7から導入された比較演算子です。$aが$bより小さいときに-1、$bと等しいときに0、 $bより大きいときに1に置き替わります。宇宙船演算子と名前がついています。

論理演算子

<?php
var_dump(50 === 50 && 40 > 30);
var_dump(50 === 50 && 40 > 50);
var_dump(50 === 30 && 40 > 50);
?>

実行結果:

bool(true) bool(false) bool(false)

&&は、まず左側の式を評価して、truefalseかを判定します。もしtrueであれば、右側の式を評価してtruefalseかを判定します。右側もtrueであれば、trueに置き替わります。

左側の式がtrueでも、右側の式がfalseであれば、falseに置き替わります。

50 === 30 && 40 > 50)のように、左側の式がflaseの場合は、右側の式は実行されず、falseに置き替わります。この仕様は短絡評価と呼ばれます。

<?php
var_dump(50 === 50 || 40 > 30);
var_dump(50 === 30 || 60 > 50);
var_dump(50 === 30 || 40 > 50);
?>

実行結果:

bool(true) bool(true) bool(false)

||は、まず左側の式を評価して、truefalseかを判定します。もしtrueであれば、右側の式は実行せずtrueに置き替わります。短絡評価です。

左側の式がfalseの場合、ようやく右側の式が調べられます。右側の式がtrueであれば、||trueに置き替わります。右側の式もfalseであれば、||falseに置き替わります。

今回は演算子のごくごくベーシックなところだけをおさえました。
その他の演算子やポイントは多くありますが、必要に応じて取り上げていきます。

スポンサーリンク

プロフィール

DESIGNMAP
お問い合わせ