2012-09-08 52 views
4

我需要直接從數據庫構建一個包含大量變量的類,爲了簡單起見,我們將它們命名爲'userX',我只研究了一點ORM,但是它的方式在我頭上。PHP試圖在類中創建動態變量

從本質上講,我想我可以用我的程序代碼

for ($i=0; $i<100; $i++) { 
public ${'user'.$i}; 
} 

但是,在一類

class test() { 

    private $var1; 

    for ($i=0; $i<10000; $i++) { 
    public ${'user'.$i}; 
    } 

    function __constructor ..... 

} 

顯然不是..但它給我留下了同樣的問題,我怎麼可以添加$用戶0,$用戶1,$用戶2等等,而不必鍵入所有的10k。

顯然,從數據庫中抓取名稱會更容易1000倍,但再次看起來更難o代碼。我應該扣下來抓住他們所有的ORM風格嗎?

+0

下載Magento的開源項目並嘗試閱讀Varien_Object類中的代碼。它會給你一個關於如何實現你的目標和谷歌什麼的相當好的主意。 –

回答

14

你可以簡單地使用魔法存取有,你想盡可能多的實例屬性:

class test{ 

    private $data; 

    public function __get($varName){ 

     if (!array_key_exists($varName,$this->data)){ 
      //this attribute is not defined! 
      throw new Exception('.....'); 
     } 
     else return $this->data[$varName]; 

    } 

    public function __set($varName,$value){ 
     $this->data[$varName] = $value; 
    } 

} 

然後你可以使用您的實例是這樣的:

$t = new test(); 
$t->var1 = 'value'; 
$t->foo = 1; 
$t->bar = 555; 

//this should throw an exception as "someVarname" is not defined 
$t->someVarname; 

,並添加了很多屬性:

for ($i=0;$i<100;$i++) $t->{'var'.$i} = 'somevalue'; 

你也可以初始化一個新創建的實例, n設置屬性

//$values is an associative array 
public function __construct($values){ 
    $this->data = $values; 
} 
+0

您從類外部賦值,我需要在類中實例化這些變量,那麼yu會爲它寫什麼工作?我會給它一個去... nope:解析錯誤:語法錯誤,意想不到的T_FOR,期待T_FUNCTION – BaneStar007

+2

它也應該使用「$ this」在類的構造函數$ this - > {'var'。$ i} ='值'。 – ibtarek

+0

混亂,也許我有一個大腦bloackage,但在構造函數中,你調用的變量還不存在。我的印象是你必須在構造函數之前聲明變量。 – BaneStar007

-1

可以使用可變變量($$ VAR)的 - 一個變量的內容被用作其他變量的名稱(雙$$)

因此沒有這個 - $> VARNAME但$ this - > $ varname

class test 
{ 
    for($i=0;$i<100;$i++) 
    { 
    $varname='var'.$i; 
    $this->$varname=$i; 
    } 
} 

這將動態創建名稱100個變量$ var0,VAR1 $ ...

1

嘗試$此 - > {$ VARNAME}

class test 
{ 

    function __construct(){ 

     for($i=0;$i<100;$i++) 
     { 

     $varname='var'.$i; 
     $this->{$varname}=$i; 
     } 
    } 
}