オブジェクト指向で見かける二つの演算子についてまとめ
改めてどういった違いがあるのか調べたので備忘録として残します。
アロー演算子
->はインスタンスプロパティやインスタンスメソッドにアクセスする際に利用します。
<?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を渡し、コンストラクタでnameをtaroで初期化しています。