2012-10-24 22 views
0

隨着學習fuelPHP,我介紹了使用範圍解析調用類,或者::意義上的。通常情況下,當我們調用在我們這樣做的類的方法...類調​​用中的差異PHP

$myclass = new myclass(); 
$myclass->mymethod(); 

燃料,方法通常被稱爲以這種方式......

myclass::mymethod(); 

,如果有任何我想知道兩者的區別?範圍解決方案是5.3版本的更新,如果不是,哪一個是理想的,或者什麼時候應該使用這些更新。

謝謝。

+0

您應該閱讀http://php.net/manual/en/language.oop5.static.php –

+0

'::'運算符已經有一段時間了:) –

回答

0

我不確定myclass::mymethod();是如何工作的,因爲我只在調用STATIC類時才使用這種語法。

MyClass::DoSomething();

稱之爲()

名爲DoSomething的靜態方法,而

$instance = new MyClass();

$instance->DoSomething();

會調用實例方法。

我沒有測試過,但我相信你會遇到的,如果你做$instance::DoSomething()

3

範圍解析運算符來訪問這兩個類常量像::const,像::$var靜態變量或調用靜態方法,如::method()錯誤。

http://php.net/manual/en/language.oop5.static.php

靜態方法,而不必只在定義的類的實例進行調用。他們在類中定義與static關鍵字。

例如,CakePHP的靜態方法之一是這樣定義的:

class ClassRegistry { 
    // ... 
    public static function &getInstance() { 
     // ... 
    } 
} 

...你可以調用像ClassRegistry::getInstance()

如果沒有static關鍵字,則需要使用ClassRegistry類的實例來調用該函數。

你可以在這裏閱讀更多,尤其是關於爲什麼使用static方法在自己的代碼,有時是一個壞主意:http://kore-nordmann.de/blog/0103_static_considered_harmful.html

+1

添加更多信息或其只是一個評論不回答 –

+1

你的願望是我的命令,@ shiplu.mokadd.im :) –

+1

第一句話沒有意義; '::'*畢竟是範圍解析運算符:) –

0

我想了解的最佳途徑爲什麼有一個靜態調用和它做什麼的背後現場是檢查這個FuelPHP博客的條目:http://fuelphp.com/blog/2011/05/why-did-you-do-that

最明顯的區別是,第一個解決方案$myObject->myMethod()這是一個動態調用:您需要一個實例來執行myMethod()

在第二種解決方案中,MyClass::myMethod()是一個靜態調用。該類充當一種函數所屬的名稱空間。你不需要一個實例。