こんにちは、セイタです。
アロー演算子っていう名称の説明だったり、プロパティにアクセスするためのものだという説明はあるものの、どういった使い方などが曖昧な説明になっているサイトなどが多く分かりづらいですよね。
サイトに限らず、動画での解説だったりしてもなかなかわかりやすい解説をしてくれているものは少ないです。
今回、PHPの学習をしている中でアロー演算子の意味合いについて理解できたので、学習者ながら解説をしてみたいと思います。
現状データベースとアクセスして、会員情報を登録しログインページにて認証を行う程度の技量は持ち合わせているので、ぜひ参考にしていただければと思います。
【PHP】アロー演算子がわからない!!そんな悩みを解決します
アロー演算子は冒頭でも出てきましたが、このような記号です『->』。
正直これだけ見てもなんのことかさっぱりだと思うので、できるだけわかりやすく解説していきたいと思います。
PHPのアロー演算子ってなに?
PHPのアロー演算子はリファレンス(説明書)のような解説ではなく、ざっくりの解説で紹介します。
そのほうが、理屈っぽくなく頭の中で理解しやすいと思うからです。
アロー演算子は、$thisなどと相まって使用されることが多いので混乱しがちですが、$thisの中身に設定されているプロパティにアクセスすると考えるとわかりやすいです。
PHPのアロー演算子のイメージ
こちらのコードを見てみてください。
PHP
<?php
class Test
{
public $name = "taro";
public $age = "20";
function sample()
{
echo $this->name;
echo $this->age;
}
}
$human = new Test();
echo $human->name;
echo $human->age;
?>
//結果:taro20
わかりやすいので、クラスを使用しての解説します。
『echo $this->name;』と『echo $this->age;』は最初に定義した『public $name = "taro";』『public $age = "20";』の部分の値にアクセスしています。
$thisはTestというクラスの中に定義されている、メンバ変数と言われる変数の値にアクセスしているという流れです。
このように、クラス内の$this->で使われるアロー演算子はメンバ変数『public $name = "taro";』『public $age = "20";』。
最後の出力部分の『echo $human->name;』『echo $human->age;』はクラスTestの中のメンバ変数$nameと$ageを指しています。
PHPのアロー演算子の使い所
PHPのアロー演算子は先程のクラスの他にも色々な部分で使用されます。
クラスの中の$this
先程、クラスを作って変数にクラスの中身を与えるという動作をしましたが、クラスを作成する際にほぼほぼ使用するでしょう。
結果的にクラスを使用するには、アロー演算子の意味を理解しなければいけないので、アロー演算子がどの部分を指しているのかを意識することで理解しやすくなるはずです。
関数へのアクセスのため
関数がよくわからないという場合は、【PHP】関数と引数がわからない!!でもこれで完璧【初心者向け】にて解説されているので、ぜひ参考にしてください。
クラスを立てなくても、関数を建てる中でアロー演算子が出てくる場合があります。
他のサイトや動画などでサンプルプログラムなどを見ていると出てくることが多いと思うので、その際もアロー演算子がどの値を指しているのかを意識しながらコードを見ることで、理解が深まっていくでしょう。
標準搭載の関数プロパティへのアクセス
クラスや自分で作った関数以外で、PHPに標準搭載されている関数のプロパティにアクセスする際にも使用されます。
そのため、○○()->○○;という記述が出てきて、後ろの〇〇が確実に自分が書いているコードの中にないプロパティだという事もしばしば。
そういうときは、前の関数がPHPの標準搭載関数の場合があるので、どこから出てきたのか混乱せずに関数の出どころは何処なのかを調べてあげると、必然的にアクセスしているプロパティが理解できるようになります。
アロー演算子が指しているところを把握すれば理解が深まる
アロー演算子は理解するのに、結構苦しみました。
正面から書いているコードを受け止めようとすると、出所がわからないプロパティに混乱することも多いでしょう。
クラスなどはオブジェクト指向の代表格、基本となってくるかと思いますが、クラスを理解できるようになるとアロー演算子も必然的に理解できるようになるので、本記事を参考に途中で諦めることなく思考を回転させてみてください。