簡體   English   中英

PHP MySQLi OOP中“ - >”和“::”之間的區別

[英]Difference between “->” and “::” in PHP MySQLi OOP

誰能說明mysqli->commitmysqli::commit之間的區別?

這個頁面中的標題是mysqli::commit ,但在示例中它們使用mysqli->commit

->在引用對象的成員時使用。

::范圍解析運算符 ,用於引用類的靜態成員。

考慮以下課程:

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

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

你可以使用->調用函數buzz()

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

但是會使用::來調用functon fizz() ,因為它是一個靜態成員(一個不需要調用類實例的成員):

FooBar::fizz();

此外,在我們討論靜態成員與實例化成員之間的區別時,您不能使用$this來引用靜態成員中的當前實例。 您可以使用self代替(沒有前導$ ),它指的是當前類,或parent ,如果你想引用父類,或者如果你有PHP 5.3.0工作的樂趣, static (它允許后期靜態綁定)。


文檔使用::來引用類中的函數,因為標題中的類名不是類的實例。 仍然使用相同的示例,引用函數buzz()的文檔條目將使用以下標頭:

FooBar::buzz

但除非文檔指定它是靜態成員,否則您需要在實例上使用->來調用它:

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

::用於靜態方法

->如果已有實例,則用於對象的方法。

如果您有一個對象的實例,則使用 - >來引用此實例中的方法:

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

使用::調用靜態方法而不必創建對象的實例:

Foo::bar();

靜態方法不能通過$this引用它的當前實例,但可以使用self引用自身(當前類)。

::指定一個靜態(類)方法,該方法可調用而無需實際實例化對象。 ->指定一個實例(對象)方法,您需要一個實例化的對象才能使用。

因此,舉例來說,如果你有一個變量$m這是類的一個實例mysqli ,你會打電話commit$m->commit()或者你可以說靜態調用commit MySQLi::commit()

::訪問類的函數而不實例化對象。

->運算符用於對象屬性

::運算符用於類屬性

在mysqli-> commit中,mysqli是MySQLi的一個實例,在mysqli :: commit中調用一個靜態方法

mysqli-> commit是一個公共函數,mysqli :: commit是一個靜態函數,兩個是mysqli類的php對象表示法。

通常在php.net文檔中::表示此類具有該方法。 對於實際使用,您必須遵循示例,因此請使用 - > sintax。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM