-> används när man refererar till en medlem av ett objekt.
::
är Scope Resolution Operator
och används för att referera till en statisk medlem av en klass.
Tänk på följande klass:
class FooBar {
public static function fizz() {
echo "Fizz";
}
public function buzz() {
echo "Buzz";
}
}
Du skulle kalla funktionen buzz()
med ->
:
$myFooBar = new FooBar();
$myFooBar->buzz();
Men skulle använda ::
för att anropa funktionen fizz()
, eftersom det är en statisk medlem (en medlem som inte kräver att en instans av klassen anropas):
FooBar::fizz();
Dessutom, medan vi pratar om skillnaden mellan statisk medlemmar kontra instansierade medlemmar kan du inte använda $this
för att referera till den aktuella instansen inom statisk medlemmar. Du använder själv
istället (ingen inledande $
) som refererar till den aktuella klassen, eller förälder
om du vill hänvisa till föräldraklassen, eller om du har nöjet att arbeta med PHP 5.3.0, statisk
(vilket möjliggör sen statisk bindning).
Dokumentationen använder ::
att referera till en funktion i en klass eftersom klassnamnet i rubriken inte är en instans av klassen. Använder fortfarande samma exempel, en dokumentationspost som hänvisar till funktionen buzz()
skulle använda följande rubrik:
FooBar::buzz
Men om inte dokumentationen anger att det är en statisk medlem, måste du använda ->
på en instans för att kalla den:
$myFooBar = new FooBar();
$myFooBar->buzz();