Unterschied zwischen “->” und “::” in PHP MySQLi OOP

Lesezeit: 3 Minuten

Kann jemand den Unterschied zwischen sagen mysqli->commit und mysqli::commit?

Die Überschrift hinein diese Seite ist mysqli::commitaber in Beispielen verwenden sie mysqli->commit.

Benutzer-Avatar
Andreas Moore

-> wird verwendet, wenn auf ein Mitglied eines Objekts verwiesen wird.

:: ist der Bereichsauflösungsoperator und wird verwendet, um auf ein statisches Mitglied einer Klasse zu verweisen.

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() verwenden ->:

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

Würde aber gebrauchen :: um die Funktion aufzurufen fizz()da es sich um ein statisches Mitglied handelt (ein Mitglied, für das keine Instanz der Klasse aufgerufen werden muss):

FooBar::fizz();

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


Die Dokumentation verwendet :: auf eine Funktion innerhalb einer Klasse verweisen, da der Klassenname im Header keine Instanz der Klasse ist. Immer noch am selben Beispiel, ein Dokumentationseintrag, der sich auf die Funktion bezieht buzz() würde den folgenden Header verwenden:

FooBar::buzz

Aber es sei denn, die Dokumentation gibt an, dass es sich um ein statisches Mitglied handelt, müssen Sie verwenden -> in einer Instanz, um es aufzurufen:

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

  • Wollte gerade posten, aber das ist ziemlich genau richtig. In der kurzen Antwort auf John gibt es keinen Unterschied. Wie Andrew feststellt, ist es eine Konvention im PHP-Handbuch, eine Klassenmethode als ClassName::methodName zu beschreiben. Die Absicht ist, sie als Objekt zu verwenden, dh $name->commit(), sofern in der Dokumentation nichts anderes angegeben ist.

    – simonjones

    7. August 2009 um 14:48 Uhr

  • Diese Antwort ist erstaunlich. wie geht das FooBar::fizz()->select(“something”)->where(“something”);

    – DerCrazyProfessor

    3. Januar 2017 um 9:18 Uhr

Benutzer-Avatar
Erleichterung

:: wird verwendet für statische Methoden.

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

Benutzer-Avatar
Josef Mansfeld

Wenn Sie eine Instanz eines Objekts haben, verwenden Sie ->, um auf eine Methode innerhalb dieser Instanz zu verweisen:

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

Die Verwendung von :: ruft eine statische Methode auf, ohne eine Instanz des Objekts erstellen zu müssen:

Foo::bar();

Eine statische Methode kann nicht auf eine aktuelle Instanz verweisen $thiskann aber durch using auf sich selbst (aktuelle Klasse) verweisen self.

  • Der Aufruf eines nicht statischen Members mit dem Bereichsauflösungsoperator löst ein E_STRICT in PHP < 5.3.0 und ein E_WARNING in PHP >= 5.3.0 aus.

    – Andrew Moore

    7. August 2009 um 14:47 Uhr

  • Und self existiert, um in einem statischen Kontext auf die aktuelle Klasse zu verweisen. Es bezieht sich nicht auf eine Instanz, sondern auf sich selbst: class A { static function b() { self::c(); } private static function c() { echo 'hello'; } };

    – Andrew Moore

    7. August 2009 um 14:54 Uhr

:: gibt eine statische (Klassen-)Methode an, die aufrufbar ist, ohne ein Objekt tatsächlich zu instanziieren. -> gibt eine Instanz-(Objekt-)Methode an, für die Sie ein instanziiertes Objekt benötigen, um es verwenden zu können.

Also zum Beispiel, wenn Sie eine Variable hätten $m das war eine Instanz der Klasse mysqliwürden Sie anrufen commit indem man sagt $m->commit()oder Sie könnten commit statisch aufrufen, indem Sie sagen MySQLi::commit()

:: greift auf die Funktion der Klasse zu, ohne ein Objekt zu instanziieren.

Benutzer-Avatar
andres descalzo

in mysqli->commit ist mysqli eine Instanz von MySQLi in mysqli::commit rufen Sie eine statische Methode auf

Benutzer-Avatar
Houssem

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

1115140cookie-checkUnterschied zwischen “->” und “::” in PHP MySQLi OOP

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy