2009-08-07 15 views

Odpowiedz

68

-> służy gdy odnosi się do członek obiektu.

:: to Scope Resolution Operator i jest używany do oznaczania statycznego elementu klasy.

Rozważmy następujące klasy:

class FooBar { 
    public static function fizz() { 
     echo "Fizz"; 
    } 

    public function buzz() { 
     echo "Buzz"; 
    } 
} 

Można by wywołać funkcję buzz() użyciu ->:

$myFooBar = new FooBar(); 
$myFooBar->buzz(); 

Ale użyłby :: wezwać functon fizz(), ponieważ jest członkiem statyczne (a członek, który nie wymaga wywołania klasy):

FooBar::fizz(); 

Ponadto, podczas gdy mówimy o różnicy między statycznych członków kontra instancja członków, nie można używać $this odnoszą się do bieżącej instancji w ciągu statycznych członków. Zamiast tego używasz self (bez wiodącego $), który odnosi się do bieżącej klasy lub parent, jeśli chcesz odwołać się do klasy nadrzędnej lub jeśli masz przyjemność pracować z PHP 5.3.0, static (co pozwala na późniejsze wiązanie statyczne).


Dokumentacja wykorzystuje :: odnieść się do funkcji wewnątrz klasy jako nazwa klasy w nagłówku nie jest instancją klasy. Nadal przy użyciu tego samego przykład wpis dokumenty odnoszące się do funkcji buzz() użyłby następujący nagłówek:

FooBar::buzz 

Ale chyba dokumentacja wskazuje, że jest to element statyczny, trzeba będzie użyć -> na przykład nazwać:

$myFooBar = new FooBar(); 
$myFooBar->buzz(); 
+5

Zamierzasz opublikować, ale jest to całkiem niezłe. W krótkiej odpowiedzi na pytanie Johna nie ma różnicy. Jak stwierdza Andrew, konwencja w podręczniku PHP opisująca metodę klasy jako ClassName :: methodName Zamiarem jest użycie jako obiektu, tj. $ Name-> commit(), chyba że w dokumentacji jest inaczej. – simonrjones

+0

Ta odpowiedź jest niesamowita. jak zrobić FooBar :: fizz() -> select ("something") -> where ("something"); – TheCrazyProfessor

0

:: uzyskuje dostęp do funkcji klasy bez instancji obiektu.

5

:: służy do metod statycznych.

-> służy do metody obiektu, jeśli już masz instancję.

0

Operatorem -> jest dla obiektu właściwości obiektu.

Operator :: jest dla właściwości klasy .

0

w mysqli-> popełnienia, mysqli jest instancją MySQLi w mysqli :: commit wywołać metody statycznej

4

Jeśli masz instancję obiektu, należy użyć -> odnosi się do metody wewnątrz tego instancja:

$foo = new Foo(); 
$foo->bar(); 

Korzystanie :: wywołuje metodę statyczną, bez konieczności utworzenia wystąpienia obiektu:

Foo::bar(); 

metoda statyczna nie może odnosić się do niego” s bieżące wystąpienie przez $this, ale może odnosić się do siebie (aktualna klasa) przy użyciu self.

+0

Wywołanie nie statycznego elementu przy pomocy operatora zakres rozdzielczości podnosi E_STRICT w PHP <5.3.0 oraz E_WARNING w PHP> = 5.3.0. –

+1

I "self" istnieje, aby odnieść się do obecnej klasy w kontekście statycznym. Nie odnosi się do instancji, ale do samego siebie: 'klasa A {funkcja statyczna b() {self :: c(); } prywatna funkcja statyczna c() {echo 'hello'; }}; ' –

0

mysqli-> commit jest funkcją publiczną, a mysqli :: commit jest statyczną funkcją, z której dwie są notacjami obiektów php klasy mysqli.

0

zwykle w dokumentacji php.net :: oznacza, że ​​ta klasa ma tę metodę. W celu praktycznego użycia należy wykonać przykład, więc użyj -> sintax.

1

:: określa metodę statyczną (klasę), która jest wywoływalna bez faktycznego tworzenia obiektu. -> określa metodę instancji (obiektu), dla której potrzebny jest obiekt utworzony w celu użycia.

Tak na przykład, jeśli miał zmienną $m który był instancją klasy mysqli, to nazwałbym commit mówiąc $m->commit(), czy można nazwać popełnić statycznie mówiąc MySQLi::commit()

Powiązane problemy