PHPにおける”->”と”::”の違い

PHPでオブジェクト指向プログラミングを行うときに見かける2つの演算子についてどのような違いがあるのか.

アロー(->)演算子を使う場合

インスタンスプロパティとインスタントメソッドにアクセスする

スコープ定義(::)演算子を使う場合

静的プロパティと静的メソッドにアクセスするのかです。

例を挙げておきます。

class Human (){
  public static $humanNumber;
  private $name;
  private $age;

  public static function hello(){
    return "Hello";
  }

  public function getName(){
    return $name;
  }
  ...
}

上のようなHumanクラスがあるとします。

$taro = new Human();
$taro->getName();
$hello = Human::hello();
$humanNumber = Human::$humanNumber;

こんな感じで使い分けるようです。 クラスを参照しなくても->と::を見れば静的かどうか分かるという良い点もあります。