PHPのプログラムで出てくる矢印「->」「=>」について、正しく理解していますか?
PHPでは、アルファベットや数字、さらにはプラス(+)、イコール(=)などの記号を使って、プログラムを作成していきます。中でも特殊なのが矢印「->」「=>」ではないでしょうか?
プラスやイコールは直感的に何をしているか理解できますが、矢印が何を意味するのか、どのように使えばよいのか分からず、悩んでいる人も多いことでしょう。
そこで今回は、
について解説します。
目次
矢印「->」「=>」の意味
矢印「->」はアロー演算子と呼ぶ
矢印のように見える「->」は、アロー演算子(オブジェクト演算子)と呼ばれています。PHPのアロー演算子は、主にクラスから生成されたインスタンスで、プロパティやメソッドにアクセスする場合に用いられます。
クラスを設計したり、さまざまなオブジェクトを作成・操作したりといったように、オブジェクト指向なプログラミングをすうえで、アロー演算子はごく基本的な要素です。
矢印「=>」はダブルアロー演算子と呼ぶ
一方で、イコールを用いて表現される矢印「=>」は、ダブルアロー演算子といってアロー演算子とは違う意味を持ちます。ダブルアロー演算子は、主に以下の2つの場面で用いられます。
- ・連想配列を取り扱うとき
- ・アロー関数を実装するとき
使い方については、次節にてサンプルコード付きで解説していきます。
アロー演算子「->」の使い方
ここでは、マイナスを使って表現する矢印「->」の使い方について解説します。
プロパティへのアクセス
プロパティは、PHPにおけるクラスのメンバ変数のことです。オブジェクト指向プログラミングにおいては、オブジェクトの性質・状態などの情報を保持するために用いられます。人間で例えれば、名前・年齢・健康状態などがプロパティに保持すべき情報といえるでしょう。
プロパティにアクセスする際には、矢印「->」を用いて以下のサンプルコードのように記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<?php class User { public $name; // 名前 public $age; // 年齢 public $haveFever; // 健康状態(true:悪い、false:良好) function __construct(string $name, int $age, bool $haveFever) { // アロー演算子を使ってプロパティにアクセス $this->name = $name; $this->age = $age; $this->haveFever = $haveFever; } } $sample_user = new User("Sato Takashi", 25, false); |
コンストラクタ内で、引数の各情報をプロパティに格納するために、矢印「->」を使ってオブジェクト自身のプロパティにアクセスしています。矢印「->」の後に続けるプロパティ名は「$」を付与せずに書くことを心がけましょう。
また、生成したインスタンスからプロパティにアクセスする際にも、矢印「->」を利用します。以下のサンプルコードを先程示したサンプルコードの末尾に追加してください。
1 2 3 4 5 6 7 8 9 10 |
echo "名前:".$sample_user->name."<br />"; echo "年齢:".$sample_user->age."<br />"; echo "健康状態:"; if($sample_user->haveFever){ echo "体調不良<br />"; }else{ echo "良好<br />"; } |
コンストラクタで記述したときと同じように、インスタンス名に矢印「->」を続け、さらにプロパティ名を続けることでアクセス可能です。ただし、プロパティがprivateの場合はアクセスできないので注意してください。privateの意味やアクセス制限については、以下関連記事の「アクセス修飾子」で解説していますので、併せて参考にしてください。
【初心者向け】PHPのclassとは?基本的な書き方から呼び出し方などを解説!メソッドへのアクセス
メソッドは、クラスが持つ関数のことです。オブジェクトが持つべき機能・振る舞いを実装します。人間で言えば、しゃべる・歩くなどの動作がメソッドで実装すべき機能といえるでしょう。
メソッドを呼び出す際も、以下のサンプルコードにように矢印「->」を用います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
<?php class User { public $name; // 名前 public $age; // 年齢 public $haveFever; // 健康状態(true:悪い、false:良好) function __construct(string $name, int $age, bool $haveFever) { // アロー演算子を使ってプロパティにアクセス // $this->name = $name; $this->name = $name; $this->age = $age; $this->haveFever = $haveFever; } // User の情報を表示 public function show_user_info() { echo "名前:".$this->name."<br />"; echo "年齢:".$this->age."<br />"; echo "健康状態:"; if($this->haveFever){ echo "体調不良<br />"; }else{ echo "良好<br />"; } } } $sample_user = new User("Sato Takashi", 25, false); // メソッドの呼び出し $sample_user->show_user_info(); |
show_user_info関数に、名前・年齢・健康状態を表示する処理を実装し、インスタンスから矢印「->」を続けてメソッド名を記述することで、呼び出すことができます。
また、矢印「->」は複数回続けて記述することが可能です。以下のサンプルコードでは、UserクラスにProductクラスが含まれている状態で、Userインスタンスから商品名や価格にアクセスするために、アロー演算子を連続して記述することで表現しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
<?php class Product { public $name; // 商品名 public $price; // 価格 function __construct(string $name, int $price) { $this->name = $name; $this->price = $price; } function get_price_including_tax() { return $this->price * 1.1; } } class User { public $name; // 名前 public $products; // 注文商品リスト function __construct(string $name, $products) { $this->name = $name; $this->products = $products; } } // 商品リスト作成 $sample_products = [new Product("Apple", 100), new Product("Pencil", 150)]; // ユーザ作成 $sample_user = new User("Sato Takashi", $sample_products); for($i=0; $i<count($sample_user->products); $i++) { echo ($i+1)."つ目の商品:"; // アロー演算子を複数回続けることが可能 echo $sample_user->products[$i]->name; echo "("; // アロー演算子を複数回続けることが可能 echo $sample_user->products[$i]->get_price_including_tax(); echo "円)<br />"; } |
ダブルアロー演算子
つづいて、イコールを使った矢印「=>」の使い方について解説していきます。
連想配列の定義
連想配列は、PHPにおける配列の一種です。通常の配列と違い、添字にあたる部分(キー)を文字列で指定できます。連想配列を定義するときは、以下のサンプルコードのようにキーと値を矢印「=>」で紐付けるように記述します。
1 2 3 4 5 6 7 8 9 10 11 |
<?php $fluit_price = [ // 「キー => 値」 の形で記述する "Apple" => 100, "Orange" => 200, "Grape" => 300 ]; // アクセスする際は通常の配列を同様に記述 echo $fluit_price["Apple"]."<br />"; |
ただし、連想配列の各要素にアクセスする場合は、矢印「=>」を使わず通常の配列のように記述するので、混同にしないように注意しましょう。
【初心者向け】php言語で「連想配列」を使う方法foreachで連想配列を扱う
foreachを使って連想配列に関わる処理を実装したいときも、矢印「=>」を使います。
以下のサンプルコードのように矢印「=>」を使えば、連想配列からキーと値をそれぞれ変数に代入して、ループ内の処理に利用することが可能です。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<?php $fluit_price = [ // 「キー => 値」 の形で記述する "Apple" => 100, "Orange" => 200, "Grape" => 300 ]; // 「キー => 値」の形でそれぞれ変数に代入する foreach ($fluit_price as $name => $price) { echo $name.":".$price."円<br/>"; } |
アロー関数
アロー関数は、名前のない関数(無名関数、クロージャ)を簡単に記述できるものです。アロー関数という名前の通り、矢印「=>」を使って表現することで、無名関数で書くよりも文字数を削減でき、可読性を向上させることができます。サンプルコードは以下の通りです。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<?php $price_list = [100, 110, 1200, 2500, 16000, 30000]; // アロー関数で表現した場合 $price_list_tax_1 = array_map( fn($price) => $price * 1.1, $price_list); // 従来の無名関数で表現した場合 $price_list_tax_2 = array_map( function($price) { return $price * 1.1; }, $price_list); for ($i=0; $i<count($price_list); $i++) { echo $price_list[$i]."円(税込".$price_list_tax_1[$i]."円)<br />"; } |
サンプルコードでは、$price_listの各価格に対して消費税率をかけたものを、配列として新たに作成しています。消費税率をかける処理をアロー関数を利用して作成しており、無名関数と比較すると少ない文字数で簡潔に記述できていることが見て取れます。
PHPでarray_mapを使って配列に複雑な計算をしてみようまとめ
いかがでしたか?
今回は、
について解説しました。
アロー演算子は、インスタンスを操作するため、ダブルアロー演算子は連想配列を定義するための基本的な要素なので、早いうちに使い慣れておきましょう。