PHP 演算子


この章では、PHP のさまざまな演算子の使い方について説明します。

PHP では、代入演算子は=変数に値を代入するために使われます。

PHP では、算術演算子は+値を足し合わせるために使われます。


PHP 算術演算子

演算子 名前 説明 例 結果
x + y 加 x と y の和 2 + 2 4
x - y 减 x と y の差 5 - 2 3
x * y 乘 x と y の積 5 * 2 10
x / y 除 x と y の商 15 / 5 3
x % y 剰余(除算の余り) x を y で割った余り 5 % 2
10 % 8
10 % 2
1
2
0
-x 負の数に設定 x の符号を反転
<?php
$x = 2;
echo -$x;
?>
-2
~x ビット反転

x をビット反転し、バイナリビット単位で「否定」演算を行います。演算規則:

~1=-2;   
~0=-1;
<?php
$x = 2;
echo ~$x;
?>
-3
a . b 連結 2 つの文字列を連結します "Hi" . "Ha" HiHa

次の例では、さまざまな算術演算子を使った場合の異なる結果を示します。

例

<?php $x=10; $y=6; echo ($x + $y); //16 を出力 echo '<br>'; //改行 echo ($x - $y); //4 を出力 echo '<br>'; //改行 echo ($x * $y); //60 を出力 echo '<br>'; //改行 echo ($x / $y); //1.6666666666667 を出力 echo '<br>'; //改行 echo ($x % $y); //4 を出力 echo '<br>'; //改行 echo -$x; ?>

試してみる »

PHP7+ バージョンでは整除演算子が追加されましたintdiv()この関数は、最初の引数を2番目の引数で割った値を整数に切り捨てて返します。使用例:

例

<?php var_dump(intdiv(10, 3)); ?>

上記の例は次のように出力します:

int(3)

PHP 代入演算子

PHP では、基本的な代入演算子は=です。これは、左のオペランドが右の式の値に設定されることを意味します。つまり、$x = 5の値は 5 です。

演算子 と同じ 説明
x = y x = y 左のオペランドが右の式の値に設定される
x += y x = x + y 加
x -= y x = x - y 减
x *= y x = x * y 乘
x /= y x = x / y 除
x %= y x = x % y 剰余(除算の余り)
a .= b a = a . b 2 つの文字列を連結する

次の例では、さまざまな代入演算子を使った場合の異なる結果を示します。

例

<?php $x=10; echo $x; //10 を出力 $y=20; $y += 100; echo $y; //120 を出力 $z=50; $z -= 25; echo $z; //25 を出力 $i=5; $i *= 6; echo $i; //30 を出力 $j=10; $j /= 5; echo $j; //2 を出力 $k=15; $k %= 4; echo $k; //3 を出力 ?>

試してみる »

次の例では、さまざまな文字列演算子を使った場合の同じ結果を示します。

例

<?php $a = "Hello"; $b = $a . " world!"; echo $b; //Hello world! を出力 $x="Hello"; $x .= " world!"; echo $x; //Hello world! を出力 ?>

試してみる »

PHP インクリメント/デクリメント演算子

演算子 名前 説明
++ x 前置インクリメント x に 1 を加えてから x を返します
x ++ 後置インクリメント x を返してから x に 1 を加えます
-- x 前置デクリメント x から 1 を引いてから x を返します
x -- 後置デクリメント x を返してから x から 1 を引きます

次の例では、インクリメント/デクリメント演算子を使った結果を示します。

例

<?php $x=10; echo ++$x; //11 を出力 $y=10; echo $y++; //10 を出力 $z=5; echo --$z; //4 を出力 $i=5; echo $i--; //5 を出力 ?>

試してみる »

PHP 比較演算子

比較演算子を使用すると、2 つの値を比較できます:

演算子 名前 説明 例
x == y 等しい x が y に等しい場合は true を返します 5==8 は false を返します
x === y 厳密に等しい x が y に等しく、かつ型が同じ場合は true を返します 5==="5" は false を返します
x != y 等しくない x が y に等しくない場合は true を返します 5!=8 は true を返します
x <> y 等しくない x が y に等しくない場合は true を返します 5<>8 は true を返します
x !== y 厳密に等しくない x が y に等しくない場合、または型が異なる場合は true を返します 5!=="5" は true を返します
x > y より大きい x が y より大きい場合は true を返します 5>8 は false を返します
x < y より小さい x が y より小さい場合は true を返します 5<8 は true を返します
x >= y 以上 x が y 以上の場合、true を返します 5>=8 は false を返します
x <= y 以下 x が y 以下の場合、true を返します 5<=8 は true を返します

次の例では、いくつかの比較演算子を使った場合の異なる結果を示します。

例

<?php $x=100; $y="100"; var_dump($x == $y); echo "<br>"; var_dump($x === $y); echo "<br>"; var_dump($x != $y); echo "<br>"; var_dump($x !== $y); echo "<br>"; $a=50; $b=90; var_dump($a > $b); echo "<br>"; var_dump($a < $b); ?>

試してみる »

PHP 論理演算子

演算子 名前 説明 例
x and y と x と y が両方とも true の場合は true を返します x=6
y=3
(x < 10 and y > 1) は true を返します
x or y 或 x と y の少なくとも 1 つが true の場合は true を返します x=6
y=3
(x==6 or y==5) は true を返します
x xor y 排他的論理和 (XOR) x と y のうち 1 つだけが true の場合は true を返します x=6
y=3
(x==6 xor y==3) は false を返します
x && y と x と y が両方とも true の場合は true を返します x=6
y=3
(x < 10 && y > 1) は true を返します
x || y 或 x と y の少なくとも 1 つが true の場合は true を返します x=6
y=3
(x==5 || y==5) は false を返します
! x 非 x が true でない場合は true を返します x=6
y=3
!(x==y) は true を返します

PHP 配列演算子

演算子 名前 説明
x + y 和集合 x と y の和集合
x == y 等しい x と y が同じキー/値ペアを持つ場合は true を返します
x === y 恒等 x と y が同じキー/値ペアを持ち、順序と型も同じ場合は true を返します
x != y 等しくない x と y が等しくない場合は true を返します
x <> y 等しくない x と y が等しくない場合は true を返します
x !== y 恒等でない x と y が等しくない場合は true を返します

次の例では、いくつかの配列演算子を使った場合の異なる結果を示します。

例

<?php $x = array("a" => "red", "b" => "green"); $y = array("c" => "blue", "d" => "yellow"); $z = $x + $y; //$x と $y の配列を結合 var_dump($z); var_dump($x == $y); var_dump($x === $y); var_dump($x != $y); var_dump($x <> $y); var_dump($x !== $y); ?>

試してみる »

三項演算子

もう 1 つの条件演算子は「?:」(または三項)演算子です。

構文

(expr1) ? (expr2) : (expr3) 

expr1 が TRUE と評価された場合の値は expr2 で、expr1 が FALSE と評価された場合の値は expr3 です。

PHP 5.3 以降、三項演算子の中央部分を省略できます。式 expr1 ?: expr3 は、expr1 が TRUE と評価された場合に expr1 を返し、それ以外の場合に expr3 を返します。

例

以下の例では、$_GET リクエストに user 値が含まれているかどうかを判定し、含まれていれば $_GET['user'] を返し、そうでなければ nobody を返します:

例

<?php //通常の書き方 $username = isset($_GET['user']) ? $_GET['user'] : 'nobody'; echo $username, PHP_EOL; //PHP 5.3+ バージョンの書き方 $username = $_GET['user'] ?: 'nobody'; echo $username, PHP_EOL; ?>

注意:PHP_EOL改行文字であり、より多くのプラットフォームと互換性があります。

PHP7+ バージョンでは、NULL 合体演算子が追加されました。??、例は次のとおりです:

例

<?php //$_GET['user'] が存在しない場合は 'nobody' を返し、それ以外の場合は $_GET['user'] の値を返します。 $username = $_GET['user'] ?? 'nobody'; //類似した三項演算子 $username = isset($_GET['user']) ? $_GET['user'] : 'nobody'; ?>

組み合わせ比較演算子 (PHP7+)

PHP7+ は結合比較演算子(combined comparison operator)をサポートしており、これは宇宙船演算子とも呼ばれます。記号は<=>。結合比較演算子を使用すると、2つの変数を簡単に比較できます。もちろん、数値データの比較に限りません。

構文は次のとおりです:

$c = $a <=> $b;

説明は次のとおりです:

  • もし $a > $bの場合、$cの値は1。
  • もし$a == $bの場合、$cの値は0。
  • もし$a < $bの場合、$cの値は-1。

例は次のとおりです:

例

<?php //整数型 echo 1 <=> 1; // 0 echo 1 <=> 2; // -1 echo 2 <=> 1; // 1 //浮動小数点型 echo 1.5 <=> 1.5; // 0 echo 1.5 <=> 2.5; // -1 echo 2.5 <=> 1.5; // 1 //文字列 echo "a" <=> "a"; // 0 echo "a" <=> "b"; // -1 echo "b" <=> "a"; // 1 ?>

演算子の優先順位

次の表は、優先順位の高い順に演算子を一覧にしています。同じ行の演算子は同じ優先順位を持ち、この場合、それらの結合方向が評価の順序を決定します。

説明:左 = 左から右、右 = 右から左。

結合方向 演算子 追加情報
无 clone new clone と new
左 [ array()
右 ++ -- ~ (int) (float) (string) (array) (object) (bool) @ 型とインクリメント/デクリメント
无 instanceof 型
右 ! 論理演算子
左 * / % 算術演算子
左 + – . 算術演算子と文字列演算子
左 << >> ビット演算子
无 == != === !== <> 比較演算子
左 & ビット演算子と参照
左 ^ ビット演算子
左 | ビット演算子
左 && 論理演算子
左 || 論理演算子
左 ? : 三項演算子
右 = += -= *= /= .= %= &= |= ^= <<= >>= => 代入演算子
左 and 論理演算子
左 xor 論理演算子
左 or 論理演算子
左 , 複数の箇所で使用

演算子の優先順位では、or と ||、&& と and はすべて論理演算子であり、効果は同じですが、優先順位は異なります。

例

<?php //優先順位: && > = > and //優先順位: || > = > or $a = 3; $b = false; $c = $a or $b; var_dump($c); //ここでの $c は int 値 3 であり、boolean 値 true ではありません。 $d = $a || $b; var_dump($d); //ここでの $d は boolean 値 true です。 ?>

上記の例の出力結果は次のとおりです:

int(3)
bool(true)

括弧の使用

括弧の対応を使用して演算の順序を明確に示し、演算子の優先順位や結合性に頼らないことで、通常はコードの可読性を高めることができます。

例

<?php //括弧を優先する演算 $a = 1; $b = 2; $c = 3; $d = $a + $b * $c; echo $d; echo "\n"; $e = ($a + $b) * $c; //括弧を使用する echo $e; echo "\n"; ?>

上記の例の出力結果は次のとおりです:

7
9
その他の拡張