PHPを学び始めたばかりの頃、多くの開発者が最初に戸惑うのが「矢印」のような形をした記号の存在です。
PHPには主に「->」(アロー演算子)と「=>」(ダブルアロー演算子)という2種類の記号が存在し、それぞれ全く異なる役割を持っています。
これらの記号を正しく使い分けることは、オブジェクト指向プログラミングや配列操作を行う上で非常に重要です。
本記事では、2026年現在の最新のPHP仕様に基づき、これらの演算子の基本的な使い方から応用的な活用シーンまでを詳しく解説します。
アロー演算子「->」の役割と使い方
アロー演算子(->)は、主にクラスのインスタンス(オブジェクト)からプロパティやメソッドにアクセスする際に使用されます。
オブジェクト指向プログラミングにおいて、インスタンス化された変数の中身を操作するための架け橋となる重要な記号です。
プロパティへのアクセス
クラス内で定義されたプロパティ(変数)の値を参照したり、新しい値を代入したりする際に使用します。
以下のコード例では、Userクラスのインスタンスを作成し、プロパティに値をセットしています。
<?php
class User {
public string $name;
}
$user = new User();
// プロパティに値を代入
$user->name = "田中太郎";
// プロパティの値を参照
echo $user->name;
?>
田中太郎
ここで注意すべき点は、プロパティ名にアクセスする際、変数名の先頭に「$」記号を付けないことです。
$user->$nameと記述してしまうと、可変プロパティとして別の意味になってしまうため注意が必要です。
メソッドの呼び出し
クラス内で定義された関数である「メソッド」を実行する際にもアロー演算子を使用します。
メソッドを呼び出すことで、そのオブジェクト特有の動作を実行させることができます。
<?php
class Greeting {
public function sayHello(string $name): string {
return "こんにちは、" . $name . "さん!";
}
}
$greet = new Greeting();
// メソッドの呼び出し
echo $greet->sayHello("佐藤");
?>
こんにちは、佐藤さん!
このように、インスタンス化されたオブジェクトからその機能を呼び出す際に欠かせないのが「->」です。
Nullsafe演算子(?->)による進化
PHP 8.0以降では、アロー演算子の派生として「?->」(Nullsafe演算子)が登場しました。
これは、対象のオブジェクトがnullである可能性がある場合に、エラーを防ぎながら安全にアクセスするための仕組みです。
<?php
$user = null;
// 通常のアロー演算子だとエラー(Fatal error)になる
// $name = $user->getName();
// Nullsafe演算子なら、nullの場合はそのままnullを返しエラーにならない
$name = $user?->getName();
var_dump($name);
?>
NULL
モダンなPHP開発では、このNullsafe演算子を組み合わせて、より堅牢なコードを記述することが推奨されています。
ダブルアロー演算子「=>」の役割と使い方
ダブルアロー演算子(=>)は、主に「キーと値」の対応関係を定義するために使用されます。
アロー演算子が「アクセス」を意味するのに対し、ダブルアローは「関連付け」を意味すると考えると分かりやすいでしょう。
連想配列での利用
PHPで最も頻繁にダブルアローを見かけるのは、連想配列を定義するシーンです。
配列の特定のキーに対して、どのような値を保持させるかを指定します。
<?php
$settings = [
"dark_mode" => true,
"font_size" => 16,
"language" => "Japanese"
];
echo $settings["language"];
?>
Japanese
この場合、"dark_mode"がキーであり、trueが値となります。
これらを結びつける役割を担っているのがダブルアロー演算子です。
foreach文でのキーと値の取得
配列の内容をループで処理する際、キーと値の両方を抽出するために「=>」を使用します。
この構文により、配列のインデックスや名前付きキーを効率よく扱うことが可能です。
<?php
$fruits = [
"apple" => "リンゴ",
"banana" => "バナナ",
"cherry" => "さくらんぼ"
];
foreach ($fruits as $key => $value) {
echo $key . "の日本語訳は" . $value . "です。\n";
}
?>
appleの日本語訳はリンゴです。
bananaの日本語訳はバナナです。
cherryの日本語訳はさくらんぼです。
as $key => $valueという記述は、PHPにおけるループ処理の定番パターンと言えます。
match式での条件分岐
PHP 8.0で導入されたmatch式でも、条件と結果を結びつけるためにダブルアローが使われます。
switch文よりも簡潔に記述でき、値を直接返すことができるため、現代のPHPでは多用されています。
<?php
$status_code = 200;
$message = match ($status_code) {
200 => "成功",
404 => "見つかりません",
500 => "サーバーエラー",
default => "不明なステータス"
};
echo $message;
?>
成功
ここでも「条件 => 結果」という対応関係を示すためにダブルアローが活躍しています。
アロー関数における「fn =>」
PHP 7.4から導入された「アロー関数(短縮無名関数)」でもダブルアローが使われます。
これは、従来のfunction() use ($var) { ... }という冗長な記述を簡潔にするための構文です。
<?php
$factor = 10;
$nums = [1, 2, 3];
// アロー関数を使って配列の各要素を10倍にする
$multiplied = array_map(fn($n) => $n * $factor, $nums);
print_r($multiplied);
?>
Array
(
[0] => 10
[1] => 20
[2] => 30
)
アロー関数では、外部スコープの変数を自動的にキャプチャできるため、非常にシンプルにコードを書くことができます。
ここで使われる「=>」は、引数を受け取ってその結果を返すという「評価結果の出力」を意味しています。
「->」と「=>」の使い分けまとめ
これまでに解説した2つの演算子の違いを、表形式で整理してみましょう。
| 演算子 | 名称 | 主な用途 | イメージ |
|---|---|---|---|
-> | アロー演算子 | オブジェクトのプロパティやメソッドへのアクセス | 内部に踏み込む |
=> | ダブルアロー演算子 | 連想配列のキーと値の対応、match式、アロー関数の戻り値 | 右側の値を紐付ける |
開発中に「どちらを使えばいいか」迷ったときは、「対象がオブジェクトかどうか」を確認してください。
インスタンスから何かを取り出したいなら「->」、データ同士をペアにしたいなら「=>」を選択するのが基本です。
よくあるエラーと注意点
初心者が陥りやすいミスとして、アロー演算子を使うべき場所で別の記号を使ってしまうケースが挙げられます。
特に多いのが、JavaScriptなどの他の言語と混同してしまい、ドット(.)でアクセスしようとするミスです。
ドット演算子との混同
JavaScriptではuser.nameのようにドットを使いますが、PHPにおいてドットは文字列の結合を意味します。
そのため、オブジェクトのプロパティにアクセスする際は必ず「->」を使用しなければなりません。
オブジェクト以外へのアロー演算子使用
変数がオブジェクトではない(例えばnullやfalse、配列など)のに「->」を使おうとするとエラーが発生します。
「Attempt to read property “name” on null」といったエラーが出た場合は、対象の変数が正しくオブジェクトとして生成されているかを確認しましょう。
<?php
// 配列に対してアロー演算子を使おうとする(エラーになる例)
$data = ["name" => "鈴木"];
// echo $data->name; // 致命的エラーが発生
?>
配列の場合は$data["name"]のように角括弧を使用する必要があります。
まとめ
PHPの矢印記号「->」と「=>」は、見た目は似ていますが、その役割は明確に分かれています。
アロー演算子「->」はオブジェクト指向におけるアクセスのための道具であり、ダブルアロー演算子「=>」はデータの紐付けや定義のための道具です。
これらの違いを正確に理解することで、PHPのコードを読み解く力は飛躍的に向上します。
特に近年は、Nullsafe演算子やmatch式、アロー関数など、これらの記号を活用した新しい構文が増えています。
それぞれの役割をしっかりとマスターして、よりスマートで読みやすいPHPプログラムを記述していきましょう。
