->
é usado quando se refere a um membro de um objeto. ::
é o Operador de Resolução de Escopo
e é usado para se referir a um membro estático de uma classe. Considere a seguinte classe:
class FooBar {
public static function fizz() {
echo "Fizz";
}
public function buzz() {
echo "Buzz";
}
}
Você chamaria a função
buzz()
usando ->
:$myFooBar = new FooBar();
$myFooBar->buzz();
Mas usaria
::
para chamar a função fizz()
, pois é um membro estático (um membro que não requer que uma instância da classe seja chamada):FooBar::fizz();
Além disso, enquanto estamos falando sobre a diferença entre estático membros versus instanciados membros, você não pode usar
$this
para se referir à instância atual dentro de static membros. Você usa self
em vez disso (sem $
inicial ) que se refere à classe atual, ou pai
código>
se você quiser consultar a classe pai ou se tiver o prazer de trabalhar com PHP 5.3.0, static
(que permite a ligação estática tardia). A documentação usa
::
para se referir a uma função dentro de uma classe como o nome da classe no cabeçalho não é uma instância da classe. Ainda usando o mesmo exemplo, uma entrada de documentação referente à função buzz()
usaria o seguinte cabeçalho:FooBar::buzz
Mas, a menos que a documentação especifique que é um membro estático, você precisará usar
->
em uma instância para chamá-lo:$myFooBar = new FooBar();
$myFooBar->buzz();