5
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

アロー演算子"->"とスコープ定義演算子"::"

Posted at

オブジェクト指向で見かける二つの演算子についてまとめ

改めてどういった違いがあるのか調べたので備忘録として残します。

アロー演算子

->はインスタンスプロパティやインスタンスメソッドにアクセスする際に利用します。

<?php

class User
{
    private $name;
    private $email;

    public function __construct($name, $email)
    {
        $this->name = $name;
        $this->email = $email;
    }
    public function hello()
    {
        echo "Hello";
    }

    public function getEmail()
    {
        echo "あなたのメールアドレスは" . $this->email;
    }
}

上記のようなUserクラスがあった場合、

$taro = new User('taro', 'taro@dummy.com');
$taro->hello(); 
//出力結果 Hello

$taro->getEmail();
//出力結果 taro@dummy.com

インスタンスを作成し、->を利用してアクセスすることができます。
$インスタンスを代入した変数名->呼び出したいインスタンスのプロパティorメソッドと書きます。

インスタンスから呼び出す動的なインスタンスプロパティやインスタンスメソッドへアクセスする際には -> を利用します。

つまりインスタンス化していなければ、->プロパティとメソッドにはアクセスすることができません。

インスタンス化していない場合、プロパティとメソッドにアクセスするときには次のスコープ定義演算子::を利用します。

スコープ定義演算子

クラス定数やstatic変数など静的なプロパティ、メソッドにアクセスする際に利用します。
静的なメソッドはインスタンスを作成せずとも利用でき、全てのインスタンスに共通して使うことができます。

<?php

class User
{
    public static $age;
    private $name;
    private $email;

    public function __construct($name, $email)
    {
        $this->name = $name;
        $this->email = $email;
    }
    public function hello()
    {
        echo "Hello";
    }

    public function getEmail()
    {
        echo "あなたのメールアドレスは" . $this->email;
    }

    public function goodBye()
    {
       echo "Goodbye";
    }
}

先ほどのクラスにstaticなプロパティとメソッドを追加しました。

User::$age;
User::hello();
//出力結果 Hello

User::goodBye();
//出力結果 Goodbye

このように::でアクセスすることができます。
クラス名::呼び出したいクラスのプロパティorメソッドと書きます。

クラスから呼び出すような静的なプロパティやメソッドにアクセスする際には::を利用します。

ちなみにインスタンスメソッド内からアクセスしたい場合には$thisを利用します。

先ほどのUserクラスでは$this->nameでnameプロパティにアクセスしていますが、
インスタンス作成時に引数でtaroを渡し、コンストラクタでnametaroで初期化しています。

5
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?