2010-11-13 56 views
2

是否有任何性能差異?主要區別是什麼? ,還有更多像類範圍和對象範圍之間的區別

public static function 
static public function 

它是一樣的嗎?

抱歉的新手問題 感謝在

亞當·拉馬丹

+3

你是指class :: hello()和$ class-> hello()之間的區別嗎?我在標籤中看到靜態 – 2010-11-13 07:16:44

+0

我只是不明白爲什麼人們使用它們?告訴通常的問題是什麼,以便我必須使用靜態標籤。 – 2010-11-13 07:20:13

+0

噢好吧,我明白了,讓我編輯我的答案! – 2010-11-13 07:30:10

回答

2

尋找有兩個沒有什麼區別:

public static function 
static public function 

這兩個類的外部訪問。在這兩種情況下,你都不能在函數內使用$ this,因爲靜態函數並不要求實例化一個對象。

考慮你有一個Cars類。

// Constructors call to a private static function add_this_car(); 
$car1 = new Cars('bentley'); 
$car2 = new Cars('Porsche GT1'); 

// public static function get_created_cars(); 
$all_cars = Cars::get_created_cars(); 

這樣一個類可以照顧它的所有實例(以及對每個實例的引用)。還有應該由類本身處理並且不需要創建實例的東西。

+0

jessy said(irC#php)static表示它定義在類範圍rathar而不是object scope,我只是不懂靜態的東西(我從來沒有用過它們),我的意思是它們是如何工作的,等等,尤其是在面向對象的編程中。我使用像$ this->不是這個::或與::靜態魔術的東西。 :),我希望你明白我的意思 – 2010-11-13 07:32:31

+0

這是否編輯回答你的問題如何使用「靜態」功能? – 2010-11-13 07:37:39

+0

所以最差的是我們不需要啓動它們?還有其他差異,如表演或任何? – 2010-11-13 07:45:28

1

想象一下,像一個漂亮的容器一樣,靜態方法可以將相關函數放在一起。

假設你想創建一個完整的你喜歡的字符串格式化函數。

然後你可以說MyClass::MakeUppercase($string)使字符串大寫。你可以說MyClass::MakeLowercase($string)使字符串小寫。

由於您的工具類不代表任何類型的對象,也沒有任何類型的內部狀態來跟蹤,您沒有理由實例化它的對象。沒有$myvar = new MyClass()才能使用這些功能。這隻會浪費內存創建永遠不會有不同內部狀態的對象來跟蹤。

+0

所以範圍只是在class :: afunction?我是否正確? – 2010-11-13 07:47:48