2011-09-20 76 views
0

是否可以定義動態變量或無論如何執行以下操作?在類中創建動態靜態變量?

實施例1:

class base 
{ 
    protected static $$dynamicVar; 

    protected function myFunction($value) 
    { 
     $dynamicVar = $value; 
     self::$$dynamicVar = new $value(); 
    } 
} 

此代碼背後的想法是實例化新的對象,而不基類知道什麼對象將被實例化。

我知道實例化新對象可以是動態的,但我需要動態生成靜態變量。

感謝,

+0

我知道我不能做保護靜態$$ var。試圖說明我需要什麼。 – Henrique

+1

有人請告訴我一個設計模式,需要這樣的結構... –

回答

2

這是不可能的,因爲據我所知,但你總是可以做這樣的事情:

class base 
{ 
    protected static $dynProps = array(); 

    protected function myFunction($value) 
    { 
     self::$dynProps[$value] = new $value(); 
    } 
} 

這裏更重要的問題是「你爲什麼需要這個? 「

+0

謝謝,我會嘗試。數組通常比普通增值變慢,但它可能會很好。做一個系統,所有的類都擴展了這個基礎,並且這個基礎負責加載所有子類中需要的其他基類,比如db類。我試圖避免相同的類被實例化兩次,如果我的系統結束有兩個類的兩個類擴展base和需要分貝。因此,它會檢查$ dynTempVar是否爲空,如果不是,它會像我們上面提到的那樣實例化類,然後應用$ this - > $ dyn = self :: $$ dynTempVar,所以可以使用它$ this – Henrique

+0

As我知道做這件事的唯一方法是使用靜態變量,即使在不同的類中,靜態變量也會保留其值,即使它是早期定義的。欣賞如果你有另一種方式來做到這一點。 – Henrique