はじめに
PHPでプログラミングをする上で、計算したり、値を比較したり、文字列を連結したりすることは基本中の基本です。これらを行うために使われるのが「演算子」です。また、PHPは柔軟な型システムを持っていますが、時には意図的にデータの型を変換する必要もあります。このステップでは、PHPの様々な演算子と型の変換について学びましょう!😊
PHPの演算子
演算子は、値に対して何らかの操作を行うための記号です。PHPにはたくさんの種類の演算子があります。ここでは主要なものを紹介します。
算術演算子
数値計算に使われる基本的な演算子です。
演算子 | 名前 | 例 | 結果 |
---|---|---|---|
+ |
加算 | $a + $b |
$a と $b の和 |
- |
減算 | $a - $b |
$a と $b の差 |
* |
乗算 | $a * $b |
$a と $b の積 |
/ |
除算 | $a / $b |
$a を $b で割った商 |
% |
剰余 | $a % $b |
$a を $b で割った余り |
** |
べき乗 (PHP 5.6以降) | $a ** $b |
$a の $b 乗 |
<?php
$a = 10;
$b = 3;
echo $a + $b; // 13
echo "<br>";
echo $a % $b; // 1
echo "<br>";
echo $a ** $b; // 1000
?>
代入演算子
変数に値を代入するための演算子です。右辺の値を左辺の変数に設定します。算術演算子と組み合わせて使うこともできます。
演算子 | 例 | 意味 |
---|---|---|
= |
$a = $b |
$a に $b の値を代入する |
+= |
$a += $b |
$a = $a + $b と同じ |
-= |
$a -= $b |
$a = $a - $b と同じ |
*= |
$a *= $b |
$a = $a * $b と同じ |
/= |
$a /= $b |
$a = $a / $b と同じ |
%= |
$a %= $b |
$a = $a % $b と同じ |
**= |
$a **= $b |
$a = $a ** $b と同じ (PHP 5.6以降) |
.= |
$a .= $b |
$a = $a . $b と同じ (文字列連結) |
<?php
$x = 10;
$y = 5;
$x += $y; // $x は 15 になる
echo $x;
echo "<br>";
$text = "こんにちは";
$text .= "、世界!"; // $text は "こんにちは、世界!" になる
echo $text;
?>
比較演算子
2つの値を比較し、結果を真偽値(true
または false
)で返します。条件分岐などでよく使われます。
演算子 | 名前 | 例 | 結果 |
---|---|---|---|
== |
等しい | $a == $b |
$a と $b の値が等しければ true (型は比較しない) |
=== |
完全に等しい (同一) | $a === $b |
$a と $b の値と型が両方等しければ true |
!= |
等しくない | $a != $b |
$a と $b の値が等しくなければ true (型は比較しない) |
<> |
等しくない | $a <> $b |
!= と同じ |
!== |
完全に等しくない (同一でない) | $a !== $b |
$a と $b の値または型が異なれば true |
< |
より小さい | $a < $b |
$a が $b より小さければ true |
> |
より大きい | $a > $b |
$a が $b より大きければ true |
<= |
以下 | $a <= $b |
$a が $b 以下であれば true |
>= |
以上 | $a >= $b |
$a が $b 以上であれば true |
<=> |
宇宙船演算子 (PHP 7以降) | $a <=> $b |
$a < $b なら -1, $a == $b なら 0, $a > $b なら 1 を返す |
==
と ===
の違いは非常に重要です! ==
は比較前に型の自動変換(型ジャグリング)を行うため、予期せぬ結果になることがあります。例えば 5 == "5"
は true
になりますが、5 === "5"
は false
です。可能な限り ===
や !==
を使うことをお勧めします。⚠️
<?php
$num = 5;
$str = "5";
var_dump($num == $str); // bool(true)
var_dump($num === $str); // bool(false)
$a = 10;
$b = 20;
var_dump($a <=> $b); // int(-1)
?>
論理演算子
複数の条件を組み合わせて評価する際に使います。
演算子 | 名前 | 例 | 結果 |
---|---|---|---|
and / && |
論理積 (AND) | $a and $b $a && $b |
$a と $b が両方 true なら true |
or / || |
論理和 (OR) | $a or $b $a || $b |
$a または $b のどちらか一方でも true なら true |
xor |
排他的論理和 (XOR) | $a xor $b |
$a または $b のどちらか一方だけが true なら true |
! |
否定 (NOT) | !$a |
$a が false なら true , true なら false |
<?php
$is_admin = true;
$is_active = false;
if ($is_admin && $is_active) {
echo "管理者でアクティブです。";
} elseif ($is_admin || $is_active) {
echo "管理者 または アクティブです。"; // こちらが出力される
}
if (!$is_active) {
echo "アクティブではありません。"; // こちらも出力される
}
?>
インクリメント/デクリメント演算子
変数の値を1増やしたり(インクリメント)、1減らしたり(デクリメント)します。変数の前につけるか後につけるかで、値を返すタイミングが異なります。
演算子 | 名前 | 例 | 説明 |
---|---|---|---|
++$a |
前置インクリメント | echo ++$a; |
$a を1増やしてから、$a の値を返す |
$a++ |
後置インクリメント | echo $a++; |
$a の元の値を返してから、$a を1増やす |
--$a |
前置デクリメント | echo --$a; |
$a を1減らしてから、$a の値を返す |
$a-- |
後置デクリメント | echo $a--; |
$a の元の値を返してから、$a を1減らす |
<?php
$count = 5;
echo ++$count; // 6 (増やしてから出力)
echo "<br>";
echo $count; // 6
$count = 5;
echo $count++; // 5 (出力してから増やす)
echo "<br>";
echo $count; // 6
?>
文字列演算子
文字列を連結するために使います。
演算子 | 名前 | 例 | 結果 |
---|---|---|---|
. |
連結 | $a . $b |
文字列 $a と 文字列 $b を連結した新しい文字列 |
.= |
連結代入 | $a .= $b |
$a = $a . $b と同じ |
<?php
$first_name = "山田";
$last_name = "太郎";
$full_name = $first_name . $last_name; // "山田太郎"
echo $full_name;
$message = "今日の天気は";
$message .= "晴れです。"; // "今日の天気は晴れです。"
echo "<br>" . $message;
?>
その他の演算子
他にも様々な演算子があります。
- 配列演算子 (
+
,==
,===
,!=
,<>
,!==
): 配列同士の結合や比較に使います。 - エラー制御演算子 (
@
): 式の実行時に発生するエラー出力を抑制します。デバッグが困難になる可能性があるため、使用は慎重に行いましょう。 - 実行演算子 (
``
バッククォート): シェルコマンドを実行します。セキュリティリスクがあるため、通常は使いません。shell_exec()
などの関数を使う方が安全です。 - 型演算子 (
instanceof
): オブジェクトが特定のクラスのインスタンスかどうか、または特定のインターフェースを実装しているかを調べます。(オブジェクト指向の章で詳しく学びます) - Null合体演算子 (
??
) (PHP 7以降): 変数が存在し、かつnull
でない場合にその値を返し、そうでなければ右辺の値を返します。isset()
と三項演算子を組み合わせたような動作を簡潔に書けます。 - 三項演算子 (
? :
): 条件式の結果に応じて2つの値のどちらかを選択します。(条件) ? (真の場合の値) : (偽の場合の値)
<?php
// Null合体演算子
$username = $_GET['user'] ?? 'guest'; // $_GET['user'] が存在しnullでなければその値、そうでなければ 'guest'
echo "ユーザー名: " . htmlspecialchars($username); // XSS対策でhtmlspecialcharsを使用
echo "<br>";
// 三項演算子
$age = 25;
$status = ($age >= 20) ? '成人' : '未成年';
echo "ステータス: " . $status; // 成人
?>
型の変換 (キャスト)
PHPは「弱い型付け言語」と呼ばれ、文脈に応じて自動的に型を変換してくれることがあります。これを「型ジャグリング」と呼びます。便利な反面、意図しない動作の原因にもなり得ます。
<?php
$num_string = "10";
$num_int = 5;
// 文字列が数値として扱われ、計算される
$result = $num_string + $num_int; // 15 (文字列 "10" が整数 10 に変換された)
var_dump($result); // int(15)
// 数値が文字列として扱われ、連結される
$message = "合計は: " . $result;
echo $message; // 合計は: 15
?>
自動的な型変換に頼るのではなく、意図的に型を変換したい場合は「キャスト」を使います。変数名の前に括弧で囲んだ型名を書くことで、その型に変換しようと試みます。
キャスト演算子 | 変換後の型 |
---|---|
(int) , (integer) |
整数 (integer) |
(bool) , (boolean) |
真偽値 (boolean) |
(float) , (double) , (real) |
浮動小数点数 (float) |
(string) |
文字列 (string) |
(array) |
配列 (array) |
(object) |
オブジェクト (object) |
(unset) |
NULL (PHP 7.2.0 以降で非推奨) |
<?php
$score_str = "100";
$score_int = (int)$score_str; // 文字列を整数にキャスト
var_dump($score_int); // int(100)
$flag_int = 1;
$flag_bool = (bool)$flag_int; // 整数を真偽値にキャスト (0以外はtrue)
var_dump($flag_bool); // bool(true)
$price = 12.8;
$price_int = (int)$price; // floatを整数にキャスト (小数点以下切り捨て)
var_dump($price_int); // int(12)
$user_id = 123;
$user_id_str = (string)$user_id; // 整数を文字列にキャスト
var_dump($user_id_str); // string(3) "123"
?>
また、settype()
関数を使って、変数の型を直接変更することもできます。
<?php
$value = "55.5";
echo gettype($value); // string
echo "<br>";
settype($value, "float"); // $value の型を float に変更
echo gettype($value); // double (floatの内部表現)
echo "<br>";
var_dump($value); // float(55.5)
?>
(int)
でキャストすると 0
になります。変換ルールは PHPマニュアルの型ジャグリング や各型のページで確認しましょう。🤔
まとめ
今回は、PHPの様々な演算子と型の変換について学びました。
- 演算子は、計算、代入、比較、論理演算など、プログラミングの基本的な操作を行います。特に比較演算子
==
と===
の違いは重要です。 - 型の変換は、PHPが自動で行う場合(型ジャグリング)と、キャスト演算子
(int)
などを使って明示的に行う場合があります。意図しない動作を避けるため、型を意識したプログラミングを心がけましょう。
これらの知識は、これからのPHPプログラミングの基礎となります。たくさんのコードを書いて、演算子や型の扱いに慣れていきましょう!💪