2009-08-07 5 views

Antwort

68

-> begeht statisch nennen werden verwendet, wenn auf eine Bezugnahme Mitglied eines Objekts.

:: ist die Scope Resolution Operator und bezieht sich auf ein statisches Mitglied einer Klasse.

Betrachten Sie die folgende Klasse:

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

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

Sie würden die Funktion aufrufen buzz()-> mit:

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

Aber würde :: verwenden, um die functon fizz() zu nennen, da es ein statisches Element (a Mitglied, für das keine Instanz der Klasse aufgerufen werden muss):

FooBar::fizz(); 

Auch während wir über den Unterschied zwischen statischen Mitglieder gegen instanziiert Mitglieder sprechen, können Sie nicht $this verwenden, um die aktuelle Instanz innerhalb statischen Mitglieder zu verweisen. Sie verwenden stattdessen self (keine führende $), die sich auf die aktuelle Klasse bezieht, oder parent, wenn Sie auf die Elternklasse verweisen möchten, oder wenn Sie das Vergnügen haben, mit PHP 5.3.0, static (das späte statische Bindung ermöglicht) zu arbeiten).


Die Dokumentation verwendet :: auf eine Funktion innerhalb einer Klasse als Klassennamen in der Kopfzeile zu finden ist nicht eine Instanz der Klasse. Noch das gleiche Beispiel verwenden, wäre eine Dokumentation Eintritt in die Funktion bezieht buzz() den folgenden Header verwenden:

FooBar::buzz 

Aber es sei denn, die Dokumentation ist es ein statisches Element gibt, müssen Sie -> auf einer Instanz verwenden, es zu nennen:

+5

War im Begriff zu posten, aber das ist ziemlich genau richtig. In kurzer Antwort auf John gibt es keinen Unterschied. Als Andrew gibt es eine Konvention im PHP-Handbuch, eine Klassenmethode als ClassName :: methodName zu beschreiben Die Absicht ist, ist als ein Objekt, d. H. $ Name-> commit(), wenn es in der Dokumentation nicht anders sagt. – simonrjones

+0

Diese Antwort ist erstaunlich. wie mache ich FooBar :: fizz() -> wähle ("etwas") -> wo ("etwas"); – TheCrazyProfessor

0

:: greift auf die Klassenfunktion zu, ohne ein Objekt zu instanziieren.

5

:: wird für statische Methoden verwendet.

-> wird für die Methode eines Objekts verwendet, wenn Sie die Instanz bereits haben.

0

Der Operator -> ist für Objekteigenschaften.

Der Operator :: ist für Klasseneigenschaften.

0

in mysqli-> begehen, mysqli ist eine Instanz von MySQLi in mysqli :: commit rufen eine statische Methode

4

Wenn Sie eine Instanz eines Objekts haben, verwenden Sie -> innerhalb dieser ein Verfahren zu verweisen Beispiel:

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

Verwendung :: ruft eine statische Methode ohne eine Instanz des Objekts zu erstellen, mit:

Foo::bar(); 

eine statische Methode auf einen kann sie nicht‘beziehen s aktuelle Instanz durch $this, aber kann sich selbst (aktuelle Klasse) unter Verwendung von self beziehen.

+0

Das Aufrufen eines nicht statischen Members mithilfe des Oszilloskopauflösungsoperators löst ein E_STRICT in PHP <5.3.0 und ein E_WARNING in PHP> = 5.3.0 aus. –

+1

Und "selbst" existiert, um sich auf die aktuelle Klasse in einem statischen Kontext zu beziehen. Es bezieht sich nicht auf eine Instanz, sondern auf sich selbst: 'Klasse A {statische Funktion b() {self :: c(); } private statische Funktion c() {echo 'hallo'; }}; ' –

0

mysqli-> commit ist eine öffentliche Funktion und mysqli :: commit ist eine statische Funktion die beiden sind PHP-Objekt-Notationen der mysqli-Klasse.

0

normalerweise in php.net Dokumentation :: bedeutet, dass diese Klasse diese Methode hat. Für die praktische Verwendung müssen Sie dem Beispiel folgen, verwenden Sie also das -> sintax.

1

:: gibt eine statische (Klassen-) Methode an, die aufgerufen werden kann, ohne ein Objekt tatsächlich zu instanziieren. -> gibt eine Instanzmethode (Objekt) an, für die ein Objekt benötigt wird, das instanziiert werden kann.

So zum Beispiel, wenn Sie eine Variable $m haben, die eine Instanz der Klasse war mysqli, würden Sie commit von $m->commit() sagen nennen, oder man könnte sagen, MySQLi::commit()

Verwandte Themen