2014-01-20 85 views
-3

我正在尋找相當長的時間來回答這個問題,但谷歌迄今沒有幫助。PHP之間的差異::和 - >

PHP手冊總是指出,即mysqli :: prepare,但在代碼中,我總是必須使用mysqli-> prepare()。有人知道兩種書寫類型之間的區別以及何時可以使用哪種方式?

+4

的靜態方法調用與非靜態方法調用 –

+0

...或者換句話說:[RTM](HTTP:/ /php.net/manual/en/language.oop5.paamayim-nekudotayim.php) – feeela

+0

[PHP中的::(雙冒號)和 - >(箭頭)之間的區別是什麼?](http:// stackoverflow .com/questions/3173501/what-the-difference-between-double-colon-and-arrow-in-php) – Rikesh

回答

1

::是調用一個靜態方法的一類:

Foo::bar(); 

->爲類的對象上調用實例方法:

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

兩者是完全不同的。

之所以手動始終指的是在符號Class::method方法是,該方法被定義爲一類的一部分,並且該符號是$obj->method更加混亂,因爲$obj是任意名稱的變量。這是一個通過它們的「靜態」類名來引用方法的約定,以使它清楚你正在談論什麼類的方法。你知道是否在其簽名的存在或不存在的關鍵字static的靜態或對象實例上調用方法:

public static DateTime DateTime::createFromFormat (string $format , string $time [, DateTimeZone $timezone ]) 
     ^^^^^^ 

http://php.net/manual/en/datetime.createfromformat.php

靜態方法,這樣調用:

$foo = DateTime::createFromFormat(...); 

但是:

public DateTime DateTime::add (DateInterval $interval) 

http://php.net/manual/en/datetime.add.php

不是靜態的,調用作爲實例方法:

$foo = new DateTime; 
$foo->add(...);