2014-01-28 70 views
0

考慮到這些類時VS:PHP:申報對象屬性的初始化時實例

class Test_A { 

    protected $value; 

    public function __construct() { 
     $this->value = null; 
    } 

} 

class Test_B { 

    protected $value = null; 

    public function __construct() { 

    } 

} 

我想知道哪一個被認爲是用於初始化對象的屬性,爲什麼最好的做法。

兩者在語法上都是正確的,根據PHP手冊,只有當值不依賴於任何計算(protected $ a = a + b;)時才聲明屬性。如果它依賴於某些計算或運行時值,則應該在類構造函數中進行初始化。

編號:http://www.php.net/manual/en/language.oop5.properties.php(見例#1)

牢記這一點,它是一個很好的做法,宣佈時,除非他們真正需要計算總是初始化屬性?

+2

該段的最後一行沒有回答你的問題? –

+0

不,我仍然不知道是否有任何缺點,我沒有考慮。如果沒關係,我也想知道。 –

回答

3

如果它不依賴於某些計算或運行時間值,它應該是 類的構造函數中被初始化。

其實如果它依賴於一些計算或運行時間值,它必須通過構造函數初始化。 PHP 5.6 relaxes this restriction,以便在編譯時涉及標量值的表達式將是合法的初始值設定項。

它是一個很好的做法,宣佈 時,除非他們真正需要計算總是初始化屬性?

當然,只要你對他們有一個有意義的價值。如果您沒有在聲明中明確初始化它們,則它們隱式設置爲null