2009-11-16 195 views

回答

2
class Foo{ 
    function __construct($arr){ 
     foreach($arr as $k => $v) 
      $this->$k = $v; 
    } 
} 

您可以查看constructor/desctructor manualproperties manual

要注意,因爲您沒有定義類中的屬性,所有設置爲public哪些恕我直言是危險的。我認爲使用reflection可能會達到同樣的效果。我只是更深入地檢查了反射,並且這是不可能的(使用PHP5),因爲從PHP6可能帶來的反射中能夠做到這一點是有意義的。

全樣本

<?php 
class Foo{ 
    function __construct($arr){ 
     foreach($arr as $k => $v) 
      $this->$k = $v; 
    } 

    function getBar(){ 
     return $this->bar; 
    } 
} 

$bar = new Foo(array(
    'bar' => 'bar', 
    'foo' => 'foo' 
) 
); 

var_dump($bar->bar); 
?> 
+0

我不知道他是否意味着這一點。 – DarthVader 2009-11-16 03:04:58

+0

你是對的我已編輯,但我認爲有一個功能來做到這一點。我正在尋找 – RageZ 2009-11-16 03:05:33

+0

$ this - > $ k = $ v會死。 – DarthVader 2009-11-16 03:07:11

0

是的,你可以做到這一點。關閉我的頭頂

public function __constructor($data){ 
    foreach($data as $k=>$v){ 
    $this->{$k} = $v; 
    } 
} 

這應該這樣做,當然你需要數學定義字段。

我不太確定它是{$ k}還是$ {k}或$ {$ k},但其中任何一個都可以工作。

0

你當然可以這樣做,因爲RageZ以上描述,但我不認爲我會建議這樣做。這樣做會造成這個類的用戶之間的「契約」過於鬆散 - 即沒有人真正知道該類具有哪些屬性。

我敢打賭,你有一組預定義的「對象屬性集」,可以反過來定義一個類層次結構。

因此,而不是做

  • 如果獲得帶有陣列 「A = 2和b = 3」,創建具有$ obj-對象> A = 3 和$ OBJ-B = 3
  • 如果我得到 「C = 5」 的數組,創建 $ obj-> C = 5

對象做到這一點:

  • 定義MyObjectOfTypeOne一類,具有屬性$ A和$ b
  • 定義MyObjectOfTypeTwo一類具有屬性$ C

然後,使用工廠模式取決於以產生正確的對象類型在傳遞給靜態工廠方法的參數上。

相關問題