[英]Difference between “->” and “::” in PHP MySQLi OOP
->
在引用對象的成員時使用。
::
是范圍解析運算符 ,用於引用類的靜態成員。
考慮以下課程:
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.