【PHP】->と::とは?これらの正体と使い方を解説します

PHP

PHPのコードでよく見かける -> や ::について解説していきます。
まずは名称からです。

->をアロー演算子と呼びます。
::をスコープ定義演算子と呼びます。

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

次に、それぞれの使い方について以下に解説しています。

スポンサーリンク

アロー演算子

アロー演算子はインスタンスのプロパティやメソッドにアクセスする時に用いられる演算子です。
使い方は以下のとおりです。

$インスタンスを代入した変数名->呼び出したいインスタンスのプロパティまたはメソッド名

ここで簡単なクラスを例にアロー演算子を使用してみます。

<?php
// クラスを作成
class Phone {
    public function call() {
        echo '電話をかけます';
    }
}

// インスタンスを作成(インスタンス化)
$iphone = new Phone();

// アロー演算子でインスタンスメソッドへアクセス
$iphone->call();

このようにアロー演算子を使って、$iphoneに代入したインスタンスのcallメソッドを呼び出します。
ここで、アロー演算子の使い方の注意です。

アロー演算子はインスタンスのプロパティとメソッドを呼び出すために使います。
つまり、インスタンス化していなければ、アロー演算子ではプロパティとメソッドにアクセスできません。

じゃあ、インスタンス化していないプロパティとメソッドにどうやってアクセスするか? こういう時にスコープ定義演算子::を使います 。

スコープ定義演算子

クラスのプロパティとメソッドにアクセスする時にはスコープ定義演算子::を使います。
使い方は以下のとおりです。

クラス名::呼び出したいクラスのプロパティまたはメソッド名

早速、スコープ演算子を使って、クラスのプロパティ、メソッドとインスタンスのプロパティ、メソッドの違いを確認しましょう。

class Test {

    // No.1 静的プロパティ
    public static $num1 = 7;

    // No.2 静的メソッド
    public static function sum($num2,$num3) {
        echo $num2 + $num3;
    }
}

// No.1 静的プロパティへアクセス
echo Test::$num1;

// No.2 静的メソッドへアクセス
Test::sum(6,2);

クラスのプロパティ、メソッドであることを指定するためにアクセス修飾子staticをつけましょう。こうすることで静的なプロパティとメソッドに指定できますね。
(アクセス修飾子を知らない方はこの記事が読んでみてください。)

上記の例からクラスをインスタンス化せずにメソッドとプロパティを指定できることが分かったと思います。

最後に使い分け方の表を乗せておきます。

インスタンスプロパティインスタンスメソッド静的プロパティ静的メソッド
外部から$v->name$v->name()クラス名::$nameクラス名::name()
インスタンスメソッド内から$this->name$this->name()self::$nameself::$name()
静的メソッド内から× × self::$nameself::$name()

コメント

タイトルとURLをコピーしました