Help us understand the problem. What is going on with this article?

PHPのアロー演算子がわかんなかったのでまとめてみた

More than 1 year has passed since last update.

アロー演算子とは

言ってしまえばこれのことです。

sample.php
$hoge -> hoge;

この矢印なんやねん!って正直思っているあなた、安心してください私もわかりません。(いいのか?)
ということで、かんたんにまとめておきます。

アロー演算子はクラスのメソッドやプロパティ(変数)にアクセスするための演算子です。
どういうことか、ソースを見たほうが早いでしょう。
そこでオブジェクト指向にありがちな人間というオブジェクトを想定します。

sample.php
<?php

class Human{
    protected $name;
    protected $age;

//説明1
    function __construct($name, $age) {
        $this   ->name  = $name;
        $this   ->age   = $age;
    }

//説明2
    function intro(){
        echo 'My name is '.$this->name.'. My age is '.$this->age.' years old.';
    }
}

$tom = new Human('Tom', '17');

//説明3
$tom->intro();

?>

これを実行すると以下が出力されます。

my name is Tom. My age is 17 years old.

なんで英語やねん、とつっこみたいですがそこはスルー。PHPはおしゃれな言語ですからね(偏見)

説明1

コンストラクタを作っています。見ればわかりますね。
ここで$this->hoge = $hogeが出現します。
これは「ここのhogeは$hogeですよ」といっているわけです。
しかし、$thisってなんやねんという疑問が発生すると思います。これは自分自身だと思ってください。つまりコンストラクタ自身なんです。
コンストラクタ自身のhogeを$hogeとしますという認識で結構だと思います。違ったらご指摘ください。
ここではクラスに$name$ageというプロパティ(変数)がありますね。それにアクセスしているのです。

説明2

これは説明1を読んでいただければわかると思います。
クラス自身、つまり$thisの中にあるnameというプロパティ(変数)やageというプロパティ(変数)を呼び出しているだけです。

説明3

もうここまで来るとわかると思います。
$tomというインスタンスが生成されました、そのインスタンスはHumanクラスから作られたものです。なのでHumanクラスから生成された$tomの中にあるintroというメソッドを呼び出しているだけです。

まとめ

->ってなんやねんと思いましたが、要は左の中にある右のものを取り出しているだけなんですね。私含め、この記事を読んでいる方が少しでも理解していただければ幸いです。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away