2010-09-27 155 views
2
$class = new Class; 
$foo = json_decode($_POST['array']); 

在這個非常人爲的例子中,我有一個有自己的函數和變量的類,等等等等。在一個對象中添加一個類的變量

我也剛剛解碼了一個JSON字符串,所以這些值現在在$foo。如何移動在$foo元素到$class,使:

$foo->name變得$class->name

如果我知道所有元素是什麼,會是微不足道的,是的......除了爲了充滿活力,讓我們說我希望他們全部轉移過來,我不知道他們的名字。

+0

我只是在完全查看您的代碼之前回答了這個問題......一定要標記您正在使用的語言/平臺。 – 2010-09-27 19:16:51

回答

2

你可以使用get_object_vars

$vars = get_object_vars($foo); 
foreach ($vars as $key => $value) { 
    $class->$key = $value; 
} 

你也可以在你的類實現這個:

public function bindArray(array $data) { 
    foreach ($data as $key => $value) { 
     $this->$key = $value; 
    } 
} 

再投對象到一個數組:

$obj->bindArray((array) $foo); 

或增加一種方法也是這樣做的:

public function bindObject($data) { 
    $this->bindArray((array) $data); 
} 
+0

乾杯 - 做到了。謝謝你的幫助! – 2010-09-28 14:04:59

1

向類中添加一個函數以從對象中加載值,然後使用foreach遍歷對象的屬性並將它們添加到類中(在初始化它們之前,不需要聲明類成員):

class Class 
{ 
    function load_values($arr) 
    { 
    foreach ($arr as $key => $value) 
    { 
     $this->$key = $value; 
    } 
    } 
} 

$class = new Class; 
$foo = json_decode($_POST['array']); 
$class->load_values((array)$foo); 
+0

噢,是的,當然... foreach也是$ key =>的值...乾杯! – 2010-09-27 19:26:30

+0

那麼,如果你沒有聲明它們,它們就會被公開......哦,直接迭代對象並不是一個好主意,因爲它們可以實現['traversable'](http://us2.php.net /manual/en/class.traversable.php)接口(此時代碼將無法按預期工作)。演員(你在代碼中做的)是安全的... – ircmaxell 2010-09-27 19:26:36

+0

@ircmaxell tr​​ue他們將公開,但這是相當不可避免的,除非JSON對象總是包含相同的鍵,在這種情況下,他們可以預先聲明。關於「可穿越」的公平觀點,我沒有意識到。 – 2010-09-27 19:45:46

相關問題