->
используется при обращении к члену объекта.
::
является оператором разрешения области действия и используется для ссылки на статический член класса.
Рассмотрим следующий класс:
class FooBar {
public static function fizz() {
echo "Fizz";
}
public function buzz() {
echo "Buzz";
}
}
Вы бы вызвали функцию buzz()
, используя ->
:
$myFooBar = new FooBar();
$myFooBar->buzz();
Но будет использовать ::
для вызова функции fizz()
, так как это статический член (член, который не требует вызова экземпляра класса):
FooBar::fizz();
Кроме того, хотя мы говорим о разнице между статическими членами и инстанцированными членами, вы не можете использовать $this
для ссылки на текущий экземпляр в static участники. Вместо этого вы используете self
(без начального $
), который относится к текущему классу, или parent
, если вы хотите обратиться к родительскому классу или если у вас есть удовольствие от работы с PHP 5.3.0, static
(что позволяет позднее статическое связывание).
Документация использует ::
для ссылки на функцию внутри класса, поскольку имя класса в заголовке не является экземпляром класса. Продолжая использовать тот же пример, запись документации, относящаяся к функции buzz()
, будет использовать следующий заголовок:
FooBar::buzz
Но если в документации не указано, что это статический член, вам нужно будет использовать ->
в экземпляре для его вызова:
$myFooBar = new FooBar();
$myFooBar->buzz();