->
viene utilizzato quando si fa riferimento a un membro di un oggetto.
::
è l'operatore di risoluzione dell'ambito
ed è usato per fare riferimento a un membro statico di una Classe.
Considera la seguente classe:
class FooBar {
public static function fizz() {
echo "Fizz";
}
public function buzz() {
echo "Buzz";
}
}
Dovresti chiamare la funzione buzz()
utilizzando ->
:
$myFooBar = new FooBar();
$myFooBar->buzz();
Ma userebbe ::
per chiamare la funzione fizz()
, in quanto è un membro statico (un membro che non richiede la chiamata di un'istanza della classe):
FooBar::fizz();
Inoltre, mentre stiamo parlando della differenza tra statico membri rispetto a istanziati membri, non puoi usare $this
per fare riferimento all'istanza corrente all'interno di statico membri. Utilizzi self
invece (nessun $
iniziale ) che si riferisce alla classe corrente, o parent
se vuoi fare riferimento alla classe genitore, o se hai il piacere di lavorare con PHP 5.3.0, static
(che consente l'associazione statica tardiva).
La documentazione utilizza ::
fare riferimento a una funzione all'interno di una classe poiché il nome della classe nell'intestazione non è un'istanza della classe. Sempre usando lo stesso esempio, una voce di documentazione che fa riferimento alla funzione buzz()
userebbe la seguente intestazione:
FooBar::buzz
Ma a meno che la documentazione non specifichi che si tratta di un membro statico, dovrai usare ->
su un'istanza per chiamarla:
$myFooBar = new FooBar();
$myFooBar->buzz();